JVM internals - what does the JVM do? — Ian Rogers

Palych
Уже с Приветом
Posts: 13684
Joined: 16 Jan 2001 10:01

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Palych »

rzen wrote:гипотеза (эвристика) что молодые объекты с большОй вероятностью долго не живут себя отлично оправдала.
Кстати, меня всё-таки не покидает ощущение что "что-то не так в этом мире, сынок..."(c)
Не должен пользователь прилагать столько усилий чтобы выбрать правильный алгоритм сборки мусора.
В первую очередь по причине отсутствия необходимой информации для принятия решений. Ни программист ни администратор не могут вменяемо определить какого размера объекты создаются и как долго они живут.
Система (JVM) должна либо сама настраивать/подстраивать параметры, либо должна быть правильная абстракция для задания параметров системы...
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by valchkou »

Montchik wrote: GC случается, когда почти вся память использована :umnik1:!
Это смотря какой колектор, судя по цитате из доки CMS не ждет когда станет совсем плохо.
источник http://java.sun.com/j2se/reference/whit ... epaper.pdf page 13
Unlike the other collectors, the CMS collector does not start an old generation collection when the old
generation becomes full. Instead, it attempts to start a collection early enough so that it can complete
before that happens. Otherwise, the CMS collector reverts to the more time-consuming stop-the-world
mark-sweep-compact algorithm used by the parallel and serial collectors. To avoid this, the CMS
collector starts at a time based on statistics regarding previous collection times and how quickly the old
generation becomes occupied. The CMS collector will also start a collection if the occupancy of the old
generation exceeds something called the initiating occupancy. The value of the initiating occupancy is
set by the command line option –XX:CMSInitiatingOccupancyFraction=n, where n is a
percentage of the old generation size. The default is 68.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Montchik »

dup
Last edited by Montchik on 20 Jul 2012 20:39, edited 1 time in total.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Montchik »

Palych wrote:
rzen wrote:гипотеза (эвристика) что молодые объекты с большОй вероятностью долго не живут себя отлично оправдала.
Кстати, меня всё-таки не покидает ощущение что "что-то не так в этом мире, сынок..."(c)
Не должен пользователь прилагать столько усилий чтобы выбрать правильный алгоритм сборки мусора.
В первую очередь по причине отсутствия необходимой информации для принятия решений. Ни программист ни администратор не могут вменяемо определить какого размера объекты создаются и как долго они живут.
Система (JVM) должна либо сама настраивать/подстраивать параметры, либо должна быть правильная абстракция для задания параметров системы...
Так JVM и так самонастраивается очень неплохо. Тюнить память и gc нет необходимости в подавляющем большинстве случаев.

Палыч, если не секрет, из каких источников вы черпаете знания о gc?
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

Palych wrote:
rzen wrote:гипотеза (эвристика) что молодые объекты с большОй вероятностью долго не живут себя отлично оправдала.
Кстати, меня всё-таки не покидает ощущение что "что-то не так в этом мире, сынок..."(c)
Не должен пользователь прилагать столько усилий чтобы выбрать правильный алгоритм сборки мусора.
В первую очередь по причине отсутствия необходимой информации для принятия решений. Ни программист ни администратор не могут вменяемо определить какого размера объекты создаются и как долго они живут.
Система (JVM) должна либо сама настраивать/подстраивать параметры, либо должна быть правильная абстракция для задания параметров системы...
управление памятью нетривиальная задача, с довольно большим количеством противоречивых нестационарных требований. поговорите с сиплюсплюсниками, они вам расскажут сколько волос вырвано на алтаре богов управления памятью :^)
Don't code today what you can't debug tomorrow.
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Flash-04 »

если бы только волос...
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Montchik »

valchkou wrote:
Montchik wrote: GC случается, когда почти вся память использована :umnik1:!
Это смотря какой колектор, судя по цитате из доки CMS не ждет когда станет совсем плохо.
источник http://java.sun.com/j2se/reference/whit ... epaper.pdf page 13
Unlike the other collectors, the CMS collector does not start an old generation collection when the old
generation becomes full. Instead, it attempts to start a collection early enough so that it can complete
before that happens. Otherwise, the CMS collector reverts to the more time-consuming stop-the-world
mark-sweep-compact algorithm used by the parallel and serial collectors. To avoid this, the CMS
collector starts at a time based on statistics regarding previous collection times and how quickly the old
generation becomes occupied. The CMS collector will also start a collection if the occupancy of the old
generation exceeds something called the initiating occupancy. The value of the initiating occupancy is
set by the command line option –XX:CMSInitiatingOccupancyFraction=n, where n is a
percentage of the old generation size. The default is 68.
Принципиально это то же самое, имхо. Просто соптемизированно под concurrent gc.
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

cms!=concurrent gc.

а вообще монтчик абсолютно прав, в подавляющем большинсвте случаев JVM неплохо самонастраивается.
Don't code today what you can't debug tomorrow.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by crypto5 »

rzen wrote:cms!=concurrent gc.

а вообще монтчик абсолютно прав, в подавляющем большинсвте случаев JVM неплохо самонастраивается.
А что такое concurrent gc если цмс таким не является?
In vino Veritas!
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

crypto5 wrote:
rzen wrote:cms!=concurrent gc.

а вообще монтчик абсолютно прав, в подавляющем большинсвте случаев JVM неплохо самонастраивается.
А что такое concurrent gc если цмс таким не является?
c4 про которую упоминает ян роджерс конкурентная gc. gc > cms.
Don't code today what you can't debug tomorrow.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by crypto5 »

rzen wrote:
crypto5 wrote:
rzen wrote:cms!=concurrent gc.

а вообще монтчик абсолютно прав, в подавляющем большинсвте случаев JVM неплохо самонастраивается.
А что такое concurrent gc если цмс таким не является?
c4 про которую упоминает ян роджерс конкурентная gc. gc > cms.
Думаю что cms все же concurrent, а ц4 в добавок к этомy еще и pauseless & continuous.
In vino Veritas!
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Montchik »

From http://www.oracle.com/technetwork/java/ ... collectors

The serial collector uses a single thread to perform all garbage collection work, which makes it relatively efficient since there is no communication overhead between threads. It is best-suited to single processor machines, since it cannot take advantage of multiprocessor hardware, although it can be useful on multiprocessors for applications with small data sets (up to approximately 100MB). The serial collector is selected by default on certain hardware and operating system configurations, or can be explicitly enabled with the option -XX:+UseSerialGC.

The parallel collector (also known as the throughput collector) performs minor collections in parallel, which can significantly reduce garbage collection overhead. It is intended for applications with medium- to large-sized data sets that are run on multiprocessor or multi-threaded hardware. The parallel collector is selected by default on certain hardware and operating system configurations, or can be explicitly enabled with the option -XX:+UseParallelGC.
New: parallel compaction is a feature introduced in J2SE 5.0 update 6 and enhanced in Java SE 6 that allows the parallel collector to perform major collections in parallel. Without parallel compaction, major collections are performed using a single thread, which can significantly limit scalability. Parallel compaction is enabled by adding the option -XX:+UseParallelOldGC to the command line.

The concurrent collector performs most of its work concurrently (i.e., while the application is still running) to keep garbage collection pauses short. It is designed for applications with medium- to large-sized data sets for which response time is more important than overall throughput, since the techniques used to minimize pauses can reduce application performance. The concurrent collector is enabled with the option -XX:+UseConcMarkSweepGC.
Last edited by Montchik on 20 Jul 2012 21:36, edited 1 time in total.
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

crypto5 wrote:
rzen wrote:
crypto5 wrote:
rzen wrote:cms!=concurrent gc.

а вообще монтчик абсолютно прав, в подавляющем большинсвте случаев JVM неплохо самонастраивается.
А что такое concurrent gc если цмс таким не является?
c4 про которую упоминает ян роджерс конкурентная gc. gc > cms.
Думаю что cms все же concurrent, а ц4 в добавок к этомy еще и pauseless & continuous.
cms безусловно concurrent но cms это не весь gc.
Don't code today what you can't debug tomorrow.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Montchik »

cms это serial, parallel or concurrent?
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by crypto5 »

Montchik wrote:cms это serial, parallel or concurrent?
буква с расшифровывается как concurrent
In vino Veritas!
User avatar
dotcom
Уже с Приветом
Posts: 9035
Joined: 25 Oct 2011 19:02
Location: SVO->ORD->SFO

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by dotcom »

rzen wrote:управление памятью нетривиальная задача, с довольно большим количеством противоречивых нестационарных требований. поговорите с сиплюсплюсниками, они вам расскажут сколько волос вырвано на алтаре богов управления памятью :^)
Жабисты на этой почве сильно больше страдают. :D
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by crypto5 »

dotcom wrote:
rzen wrote:управление памятью нетривиальная задача, с довольно большим количеством противоречивых нестационарных требований. поговорите с сиплюсплюсниками, они вам расскажут сколько волос вырвано на алтаре богов управления памятью :^)
Жабисты на этой почве сильно больше страдают. :D
Та нет.
In vino Veritas!
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Montchik »

crypto5 wrote:
Montchik wrote:cms это serial, parallel or concurrent?
буква с расшифровывается как concurrent
A буква s как расшифровывается? :pain1:
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by crypto5 »

Montchik wrote:
crypto5 wrote:
Montchik wrote:cms это serial, parallel or concurrent?
буква с расшифровывается как concurrent
A буква s как расшифровывается? :pain1:
Sweep
In vino Veritas!
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Zorkus »

rzen wrote:
crypto5 wrote:
rzen wrote:
crypto5 wrote:
rzen wrote: именно это и означает.
Выше вроде картинка была что concurrent mark sweep останавливает мир не на все время работы а на короткий промежуток времени в начале что бы что-то там маркнуть, и еще в конце.
см уточнение, дефраг останавливает мир :)
Но все равно остается непонятным остановлен ли мир на все 4 секунды?
дефраг останавливает мир
Дык неясно, 4 секунды это именно время на дефраг, или время на всю сборку? Насколько я помню, в HotSpot нет способа дампить в лог отдельные фазы сборки с таймингами.
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Zorkus »

Flash-04 wrote:
rzen wrote:расписания конечно нет
видимо приложение само его инициирует:

Code: Select all

INFO   | jvm 2    | 2012/07/20 03:37:35 | [Full GC
INFO   | jvm 2    | 2012/07/20 04:37:41 | [Full GC
INFO   | jvm 2    | 2012/07/20 05:37:48 | [Full GC
INFO   | jvm 2    | 2012/07/20 06:37:54 | [Full GC
INFO   | jvm 2    | 2012/07/20 07:38:00 | [Full GC
INFO   | jvm 2    | 2012/07/20 08:38:06 | [Full GC
INFO   | jvm 2    | 2012/07/20 09:38:13 | [Full GC
INFO   | jvm 2    | 2012/07/20 10:38:19 | [Full GC
INFO   | jvm 2    | 2012/07/20 11:38:26 | [Full GC
INFO   | jvm 2    | 2012/07/20 12:38:32 | [Full GC
INFO   | jvm 2    | 2012/07/20 13:38:38 | [Full GC
Давно не видел IRL крупное приложение, который вручную вызывают сборщик. Зачем? И почему именно через час?
Last edited by Zorkus on 20 Jul 2012 23:06, edited 1 time in total.
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

Zorkus wrote:Дык неясно, 4 секунды это именно время на дефраг, или время на всю сборку?
если включен cms то скорее всего дефраг, если нет, то вся сборка.
Don't code today what you can't debug tomorrow.
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Zorkus »

rzen wrote:
Flash-04 wrote:
rzen wrote:расписания конечно нет
видимо приложение само его инициирует:

Code: Select all

INFO   | jvm 2    | 2012/07/20 03:37:35 | [Full GC
INFO   | jvm 2    | 2012/07/20 04:37:41 | [Full GC
INFO   | jvm 2    | 2012/07/20 05:37:48 | [Full GC
INFO   | jvm 2    | 2012/07/20 06:37:54 | [Full GC
INFO   | jvm 2    | 2012/07/20 07:38:00 | [Full GC
INFO   | jvm 2    | 2012/07/20 08:38:06 | [Full GC
INFO   | jvm 2    | 2012/07/20 09:38:13 | [Full GC
INFO   | jvm 2    | 2012/07/20 10:38:19 | [Full GC
INFO   | jvm 2    | 2012/07/20 11:38:26 | [Full GC
INFO   | jvm 2    | 2012/07/20 12:38:32 | [Full GC
INFO   | jvm 2    | 2012/07/20 13:38:38 | [Full GC
приложение может взвести флаг, который JVM может обслужить а может и нет
http://docs.oracle.com/javase/6/docs/ap ... em.html#gc()

Runs the garbage collector.
Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects.
обратите внимание на выделенное слово.
Не говоря о том, что есть флаг -XX:-DisableExplicitGC, специально чтобы деплоить приложения, авторы которых believed to know more about GC than HotSpot creators :)
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Zorkus »

Flash-04 wrote:если бы только волос...
И если бы только с головы..
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

на самом деле мы тут слегка пижонимся, но лично мне ни разу не приходилось бороться с GC на выживание. всегда хватало штатных силёнок обычного GC. до пятой жабы были конечно попадосы, но к счастью тогда мои контакты с жабой были некритическими. а сейчас приложений со сверхкритическими потребностями к памяти у меня нет, так что весь этот стёб чисто теоретический, положено знать по долгу службы но не более того.
Don't code today what you can't debug tomorrow.

Return to “Вопросы и новости IT”