Garbage Collection

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

Garbage Collection

Post by Palych »

А почему а Java сборка мусора начинается когда его накопилось достаточно много (70%)?
Почему не убираться когда для этого есть ресурсы (CPU time)?
Как с этим в других системах?
iDesperado
Уже с Приветом
Posts: 1349
Joined: 28 Nov 2008 17:50

Re: Garbage Collection

Post by iDesperado »

Palych wrote:А почему а Java сборка мусора начинается когда его накопилось достаточно много (70%)?
Почему не убираться когда для этого есть ресурсы (CPU time)?
Как с этим в других системах?
который из них ? у java их несколько ...
Palych
Уже с Приветом
Posts: 13723
Joined: 16 Jan 2001 10:01

Re: Garbage Collection

Post by Palych »

iDesperado wrote: который из них ? у java их несколько ...
Когда я смотрел туда (лет 5 назад) - был только один экспериментальный коллектор, который вроде бы по-другому работал.
Назывался он как-то отталкивающе... Agressive?
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Garbage Collection

Post by valchkou »

Palych wrote:
iDesperado wrote: который из них ? у java их несколько ...
Когда я смотрел туда (лет 5 назад)
палыч, ну ты и юморист, 5 лет назад посмотрел и все думал думал и наконец то решил задать вопрос.
Palych
Уже с Приветом
Posts: 13723
Joined: 16 Jan 2001 10:01

Re: Garbage Collection

Post by Palych »

А думал за 5 лет вырастит целое поколение специалистов, способных без труда ответить на этот вопрос...
Впрочем never mind. Погуглю как-нибудь...
User avatar
kyk
Уже с Приветом
Posts: 31589
Joined: 21 Nov 2004 05:12
Location: камбуз на кампусе

Re: Garbage Collection

Post by kyk »

Palych wrote:А почему а Java сборка мусора начинается когда его накопилось достаточно много (70%)?

Как с этим в других системах?
У меня по понедельникам
Лучше переесть, чем недоспать! © Обратное тоже верно :umnik1:
User avatar
perasperaadastra
Уже с Приветом
Posts: 20128
Joined: 21 Feb 2009 22:55
Location: Лох Онтарио

Re: Garbage Collection

Post by perasperaadastra »

:D
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Garbage Collection

Post by Мальчик-Одуванчик »

Спасибо что напомнили.
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Garbage Collection

Post by Сабина »

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
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Garbage Collection

Post by valchkou »

Сабина wrote:
Palych wrote:А думал за 5 лет вырастит целое поколение специалистов, способных без труда ответить на этот вопрос...
Впрочем never mind. Погуглю как-нибудь...
Ну вы даете. Вас же попросили тип коллектора уточнить :)
Для high throughput систем хорошо работает G1GC, но у него конечно свое понимание как оптимизировать процесс, а не просто "кога у меня для тебя есть CPU - тогда и включайся
не важно какой тип коллектора - все они в JVM запускаются по memory threshold а не по CPU availability, даже G1.
помнится был какой то коллектор который запускался по статистике. Т.е пытался угадать когда лучше.
Но опять же это не 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.
Palych
Уже с Приветом
Posts: 13723
Joined: 16 Jan 2001 10:01

Re: Garbage Collection

Post by Palych »

Сабина wrote: Ну вы даете. Вас же попросили тип коллектора уточнить :)
Уточнить не могу. Я любопытствую - есть ли сейчас в Java a Garbage collector, который не расслабляется если свободной памяти много.
Для 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

Post by Сабина »

Negative, коллекция идет такой же обычной пилой, нарастает до максимума памяти выставленного параметром и идет сборка гарбиджа. Конечно при условии чтотнет leaks and major screwups.
Я если честно не поняла мысли глубокой про 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

Post by Сабина »

сходите на сайт gceasy.io и скормите им какой нибудь свой GC log, G1GC интереснее.
много любопытного узнаете
https://www.youtube.com/watch?v=wOwblaKmyVw
iDesperado
Уже с Приветом
Posts: 1349
Joined: 28 Nov 2008 17:50

Re: Garbage Collection

Post by iDesperado »

valchkou wrote: не важно какой тип коллектора - все они в JVM запускаются по memory threshold а не по CPU availability, даже G1.
а какой физический смысл смотреть на CPU availability ? уже через долю секунды нагрузка изменится.
User avatar
metaller
Уже с Приветом
Posts: 4532
Joined: 06 Jul 2011 12:22
Location: Oak Harbor, WA

Re: Garbage Collection

Post by metaller »

Сабина 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.
Использую G1 garbage collector для прожроливого desktop приложения. По ощущениям действительно обеспечивает более которкие паузы.
Я не хочу оплачивать ничьи аборты, велферы или детсады. Каждый должен сам принимать решения и нести за них ответственность.

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