Garbage Collection
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Garbage Collection
А почему а Java сборка мусора начинается когда его накопилось достаточно много (70%)?
Почему не убираться когда для этого есть ресурсы (CPU time)?
Как с этим в других системах?
Почему не убираться когда для этого есть ресурсы (CPU time)?
Как с этим в других системах?
-
- Уже с Приветом
- Posts: 1349
- Joined: 28 Nov 2008 17:50
Re: Garbage Collection
который из них ? у java их несколько ...Palych wrote:А почему а Java сборка мусора начинается когда его накопилось достаточно много (70%)?
Почему не убираться когда для этого есть ресурсы (CPU time)?
Как с этим в других системах?
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Garbage Collection
Когда я смотрел туда (лет 5 назад) - был только один экспериментальный коллектор, который вроде бы по-другому работал.iDesperado wrote: который из них ? у java их несколько ...
Назывался он как-то отталкивающе... Agressive?
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Garbage Collection
палыч, ну ты и юморист, 5 лет назад посмотрел и все думал думал и наконец то решил задать вопрос.Palych wrote:Когда я смотрел туда (лет 5 назад)iDesperado wrote: который из них ? у java их несколько ...
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Garbage Collection
А думал за 5 лет вырастит целое поколение специалистов, способных без труда ответить на этот вопрос...
Впрочем never mind. Погуглю как-нибудь...
Впрочем never mind. Погуглю как-нибудь...
-
- Уже с Приветом
- Posts: 31589
- Joined: 21 Nov 2004 05:12
- Location: камбуз на кампусе
Re: Garbage Collection
У меня по понедельникамPalych wrote:А почему а Java сборка мусора начинается когда его накопилось достаточно много (70%)?
Как с этим в других системах?
Лучше переесть, чем недоспать! © Обратное тоже верно
-
- Уже с Приветом
- Posts: 20128
- Joined: 21 Feb 2009 22:55
- Location: Лох Онтарио
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: Garbage Collection
Спасибо что напомнили.
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Garbage Collection
Ну вы даете. Вас же попросили тип коллектора уточнитьPalych wrote:А думал за 5 лет вырастит целое поколение специалистов, способных без труда ответить на этот вопрос...
Впрочем never mind. Погуглю как-нибудь...
Для high throughput систем хорошо работает G1GC, но у него конечно свое понимание как оптимизировать процесс, а не просто "кога у меня для тебя есть CPU - тогда и включайся
G1 GC is an incremental parallel compacting GC that provides more predictable pause times compared to CMS GC and Parallel Old GC. By introducing a parallel, concurrent and multi-phased marking cycle, G1 GC can work with much larger heaps while providing reasonable worst-case pause times. The basic idea with G1 GC is to set your heap ranges (using -Xms for min heap size and -Xmx for the max size) and a realistic (soft real time) pause time goal (using -XX:MaxGCPauseMillis) and then let the GC do its job.
With the introduction of G1 GC, HotSpot moves away from its conventional GC layout where a contiguous Java heap splits into (contiguous) young and old generations. In G1 GC, HotSpot introduces the concept of “regions”. A single large contiguous Java heap space divides into multiple fixed-sized heap regions. A list of “free” regions maintains these regions. As the need arises, the free regions are assigned to either the young or the old generation. These regions can span from 1MB to 32MB in size depending on your total Java heap size. The goal is to have around 2048 regions for the total heap. Once a region frees up, it goes back to the "free" regions list. The principle of G1 GC is to reclaim the Java heap as much as possible (while trying its best to meet the pause time goal) by collecting the regions with the least amount of live data i.e. the ones with most garbage, first; hence the name Garbage First.
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Garbage Collection
не важно какой тип коллектора - все они в JVM запускаются по memory threshold а не по CPU availability, даже G1.Сабина wrote:Ну вы даете. Вас же попросили тип коллектора уточнитьPalych wrote:А думал за 5 лет вырастит целое поколение специалистов, способных без труда ответить на этот вопрос...
Впрочем never mind. Погуглю как-нибудь...
Для high throughput систем хорошо работает G1GC, но у него конечно свое понимание как оптимизировать процесс, а не просто "кога у меня для тебя есть CPU - тогда и включайся
помнится был какой то коллектор который запускался по статистике. Т.е пытался угадать когда лучше.
Но опять же это не CPU\Resource availability.
В некоторых браузерах GC(не жава) как раз работает по CPU\Resource + memory threshold.
Оракл видимо решил не париться с этим.
В целом я пока доволен G1 коллектором (Hotspot java 8 ). Работает намного шустрее чем java 7 без настроек.
Главное не использовать OpenJDK, который идет по умолчанию на EC2 инстансах
Last edited by valchkou on 14 Feb 2017 06:39, edited 1 time in total.
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Garbage Collection
Уточнить не могу. Я любопытствую - есть ли сейчас в Java a Garbage collector, который не расслабляется если свободной памяти много.Сабина wrote: Ну вы даете. Вас же попросили тип коллектора уточнить
Если я правильно понимаю: даже если памяти много, но мусор имеется - хотя бы один регион будет взят в работу...Для high throughput систем хорошо работает G1GC, но у него конечно свое понимание как оптимизировать процесс, а не просто "кога у меня для тебя есть CPU - тогда и включайся
The principle of G1 GC is to reclaim the Java heap as much as possible (while trying its best to meet the pause time goal) by collecting the regions with the least amount of live data i.e. the ones with most garbage, first; hence the name Garbage First.
Выходит - ответ на мой вопрос утвердительный...
Спасибо!
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Garbage Collection
Negative, коллекция идет такой же обычной пилой, нарастает до максимума памяти выставленного параметром и идет сборка гарбиджа. Конечно при условии чтотнет leaks and major screwups.
Я если честно не поняла мысли глубокой про CPU threshhold ? Вы не забывайте что коллекция тормозит перформанс самого приложения, вы предлагаете чтобы треды приложения вступили в борьбу с тредами гарбидж коллектора под лозунгом "обеспечь родине 80% free memory at all times" ? Зачем, кому от этого лучше ? Чтоб CPU ниже 95% не "простаивало" ?
Чай не глупые люди придумали как эту экосистему ресурсов и процессов построить и контролировать. Посмотрите какие там возможности тьюнинга накидали в последней джаве. Если в этом разбираться это все совсем не так банально как поставил Xmx и забыл
Я если честно не поняла мысли глубокой про CPU threshhold ? Вы не забывайте что коллекция тормозит перформанс самого приложения, вы предлагаете чтобы треды приложения вступили в борьбу с тредами гарбидж коллектора под лозунгом "обеспечь родине 80% free memory at all times" ? Зачем, кому от этого лучше ? Чтоб CPU ниже 95% не "простаивало" ?
Чай не глупые люди придумали как эту экосистему ресурсов и процессов построить и контролировать. Посмотрите какие там возможности тьюнинга накидали в последней джаве. Если в этом разбираться это все совсем не так банально как поставил Xmx и забыл
Last edited by Сабина on 14 Feb 2017 08:30, edited 1 time in total.
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Garbage Collection
сходите на сайт gceasy.io и скормите им какой нибудь свой GC log, G1GC интереснее.
много любопытного узнаете
много любопытного узнаете
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 1349
- Joined: 28 Nov 2008 17:50
Re: Garbage Collection
а какой физический смысл смотреть на CPU availability ? уже через долю секунды нагрузка изменится.valchkou wrote: не важно какой тип коллектора - все они в JVM запускаются по memory threshold а не по CPU availability, даже G1.
-
- Уже с Приветом
- Posts: 4532
- Joined: 06 Jul 2011 12:22
- Location: Oak Harbor, WA
Re: Garbage Collection
Использую G1 garbage collector для прожроливого desktop приложения. По ощущениям действительно обеспечивает более которкие паузы.Сабина wrote:Ну вы даете. Вас же попросили тип коллектора уточнитьPalych wrote:А думал за 5 лет вырастит целое поколение специалистов, способных без труда ответить на этот вопрос...
Впрочем never mind. Погуглю как-нибудь...
Для high throughput систем хорошо работает G1GC, но у него конечно свое понимание как оптимизировать процесс, а не просто "кога у меня для тебя есть CPU - тогда и включайся
G1 GC is an incremental parallel compacting GC that provides more predictable pause times compared to CMS GC and Parallel Old GC. By introducing a parallel, concurrent and multi-phased marking cycle, G1 GC can work with much larger heaps while providing reasonable worst-case pause times. The basic idea with G1 GC is to set your heap ranges (using -Xms for min heap size and -Xmx for the max size) and a realistic (soft real time) pause time goal (using -XX:MaxGCPauseMillis) and then let the GC do its job.
With the introduction of G1 GC, HotSpot moves away from its conventional GC layout where a contiguous Java heap splits into (contiguous) young and old generations. In G1 GC, HotSpot introduces the concept of “regions”. A single large contiguous Java heap space divides into multiple fixed-sized heap regions. A list of “free” regions maintains these regions. As the need arises, the free regions are assigned to either the young or the old generation. These regions can span from 1MB to 32MB in size depending on your total Java heap size. The goal is to have around 2048 regions for the total heap. Once a region frees up, it goes back to the "free" regions list. The principle of G1 GC is to reclaim the Java heap as much as possible (while trying its best to meet the pause time goal) by collecting the regions with the least amount of live data i.e. the ones with most garbage, first; hence the name Garbage First.
Я не хочу оплачивать ничьи аборты, велферы или детсады. Каждый должен сам принимать решения и нести за них ответственность.
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Garbage Collection
Понятно что нужен компромисс, но если смотреть на память и ничего не делать если её достаточно - становится невозможно определить сколько нужно памяти и сколько её используется.iDesperado wrote:а какой физический смысл смотреть на CPU availability ? уже через долю секунды нагрузка изменится.valchkou wrote: не важно какой тип коллектора - все они в JVM запускаются по memory threshold а не по CPU availability, даже G1.
А если выделить слишком много - есть риск что не хватит времени разобрать большую кучу к тому времени как место понадобится.
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Garbage Collection
А как с этим в .Net?
Там тоже с бубном пляшут настраивая сборщики мусора?
Там тоже с бубном пляшут настраивая сборщики мусора?
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Garbage Collection
CPU availability возможно не совсем точное определение, но тут нет ничего удивительногоiDesperado wrote:а какой физический смысл смотреть на CPU availability ? уже через долю секунды нагрузка изменится.valchkou wrote: не важно какой тип коллектора - все они в JVM запускаются по memory threshold а не по CPU availability, даже G1.
К примеру V8 javascript GC использует данную концепцию
" Idle Time Garbage Collection Scheduling"
V8 posts idle tasks to the scheduler in order to perform both minor and major garbage collection during idle time
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Garbage Collection
палыч, расскажи зачем ты бубном пляшешь, что у тебя за usecase?Palych wrote:А как с этим в .Net?
Там тоже с бубном пляшут настраивая сборщики мусора?
java 8 великолепно работает из коробочки без бубнов. Ну если только размер памяти задать побольше
-
- Уже с Приветом
- Posts: 1349
- Joined: 28 Nov 2008 17:50
Re: Garbage Collection
As soon as an incremental major garbage collection is started, V8 posts an idle task to Chrome's task scheduler, which will perform incremental marking steps. These steps can be linearly scaled by the number of bytes that should be marked. Based on the average measured marking speed, the idle task tries to fit as much marking work as possible into the given idle time. The idle task keeps reposting itself until all live objects are marked. V8 then posts an idle task for finalizing the major garbage collection..valchkou wrote: CPU availability возможно не совсем точное определение, но тут нет ничего удивительного
К примеру V8 javascript GC использует данную концепцию
" Idle Time Garbage Collection Scheduling"V8 posts idle tasks to the scheduler in order to perform both minor and major garbage collection during idle time
как я понимаю idle time это время между major garbage collection, которое четко задается.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Garbage Collection
за всё надо платить: чем больше памяти, тем больше GC прибираться, тем дольше оно работает, тем дольше всё стоит и ждёт во время цикла уборки.valchkou wrote:java 8 великолепно работает из коробочки без бубнов. Ну если только размер памяти задать побольше
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: Garbage Collection
Вот-вот, при определённых условиях возникает лавинный эффект, и приложение встаёт колом (я это видео на java 6 в сочетании с глюком в jboss vfs)Flash-04 wrote:за всё надо платить: чем больше памяти, тем больше GC прибираться, тем дольше оно работает, тем дольше всё стоит и ждёт во время цикла уборки.valchkou wrote:java 8 великолепно работает из коробочки без бубнов. Ну если только размер памяти задать побольше
А главное: "побольше" - это сколько?
Я знаю что интенсивный анализ требований к памяти новых приложений заканчивается выводом: "А сколько у вас есть? Вот и выделяйте всю. Только не забудьте Xms поставить такой-же как Xmx"... а потом админы утверждаются во мнении "Жаба жрет память как свинья помои".
Мне любопытно изменилось ли что-то за последние годы
-
- Уже с Приветом
- Posts: 1870
- Joined: 28 Dec 2014 18:20
Re: Garbage Collection
А где написано про 70%? У меня так сейчас под Жава6 и на 80% не срабатывает, где то 90% доходит, потом жах.Palych wrote:А почему а Java сборка мусора начинается когда его накопилось достаточно много (70%)?
Почему не убираться когда для этого есть ресурсы (CPU time)?
Как с этим в других системах?
Vox populi vox Dei
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Garbage Collection
Flash-04 wrote: за всё надо платить: чем больше памяти, тем больше GC прибираться, тем дольше оно работает, тем дольше всё стоит и ждёт во время цикла уборки.
мужики да вы сначала попробуйте, палыч, какой жава 6, это что вообще?Palych wrote: Вот-вот, при определённых условиях возникает лавинный эффект, и приложение встаёт колом (я это видео на java 6 в сочетании с глюком в jboss vfs)
вот слушает молодежь вас и думает что жава это гавно. и вместо жавы начинает изучать гавно.
времена изменились, теперь и железки другие и GC и сама жава.
все летает и на 1 гиге и на 12 и на 32х, никаких долгих пауз, милисекунды.
Запустите, поиграйтесь, посмотрите статистику, и уверяю вас вы будете приятно удивлены
-
- Уже с Приветом
- Posts: 1870
- Joined: 28 Dec 2014 18:20
Re: Garbage Collection
12Gb хип?? Жава 8 вроде 1гб максимум, не?valchkou wrote:Flash-04 wrote: за всё надо платить: чем больше памяти, тем больше GC прибираться, тем дольше оно работает, тем дольше всё стоит и ждёт во время цикла уборки.мужики да вы сначала попробуйте, палыч, какой жава 6, это что вообще?Palych wrote: Вот-вот, при определённых условиях возникает лавинный эффект, и приложение встаёт колом (я это видео на java 6 в сочетании с глюком в jboss vfs)
вот слушает молодежь вас и думает что жава это гавно. и вместо жавы начинает изучать гавно.
времена изменились, теперь и железки другие и GC и сама жава.
все летает и на 1 гиге и на 12 и на 32х, никаких долгих пауз, милисекунды.
Запустите, поиграйтесь, посмотрите статистику, и уверяю вас вы будете приятно удивлены
maximum heap size
"Smaller of 1/4th of the physical memory or 1GB. Before Java SE 5.0, the default maximum heap size was 64MB. You can override this default using the -Xmx command-line option."
https://docs.oracle.com/javase/8/docs/t ... omics.html" onclick="window.open(this.href);return false;
Vox populi vox Dei