Есть ли какое-либо условие, когда приложение никогда не будет выполнять сборку мусора? - PullRequest
0 голосов
/ 30 сентября 2018

Есть ли какое-либо условие, когда приложение никогда не будет выполнять сборку мусора?Теоретически возможно ли иметь такой дизайн приложения?

Ответы [ 4 ]

0 голосов
/ 01 октября 2018

Есть ли какое-либо условие, когда приложение никогда не будет выполнять сборку мусора?

Вы можете предотвратить запуск ГХ, если у вас есть Поток, который не достигает безопасной точки.

Если вы не используете параллельный коллектор, ГХ будет выполняться только тогда, когдаобласть памяти, например, при заполнении пробелов Eden или Tenure.

Если вы сделаете их достаточно большими, а уровень мусора достаточно низким, GC не будет работать достаточно долго, чтобы вы могли выполнить GC за ночь,в окне обслуживания или перезапустите процесс.

Теоретически возможно ли иметь такой дизайн приложения?

Я работал над приложениями, которые собирают GC менее одного раза в день (и некоторые из них перезапускаются каждый день)

Например, допустим, вы производите 300 КБ мусора в секунду, или 1 ГБ в час, с размером Eden 24 ГБ, который вы можете запустить в течение целого дня без сбора.

В действительности, если вы перемещаете большую часть своих данных вне кучи, например, Chronicle Map или Queue, вы можете найти 4 ГБ, которые могут работать в течение дня или даже недели с небольшим сбором.

0 голосов
/ 30 сентября 2018

Сборка мусора происходит на объектах, на которые больше нет ссылок в вашем приложении.

В Java 11 есть способ никогда не выполнять преднамеренно сборку мусора, запустив JVM с недавно представленной Epsilon.GC , сборщик мусора, который обрабатывает выделение памяти, но никогда не освобождает выделенную память.

0 голосов
/ 30 сентября 2018

На рынке есть по крайней мере один продукт, который реализует высокочастотную торговлю с использованием технологий Java и jvm.

Очевидно, что приложение, которое должно реагировать в микросекундах, не может позволить сборщику мусора запустить иостановить систему на произвольные периоды времени.

В этом случае решением было написать приложение целиком, чтобы никогда не создавать объекты, которые превращаются в мусор.Например, все входные данные хранятся в фиксированных байтовых массивах (которые выделяются один раз во время запуска), которые затем используются в качестве буферов для всех видов обработки.

Если я не ошибаюсь, вы можете прослушать более подробную информацию о радиоподкасте программного обеспечения.Я думаю, что это должен быть этот эпизод: http://www.se -radio.net / 2016/04 / se-radio-episode-255-monica-beckwith-on-java-garbage-collection /

0 голосов
/ 30 сентября 2018

Да, есть.Пожалуйста, прочитайте об утечках памяти в Java.Пример описан в Эффективном элементе Java 6: устранение устаревших ссылок на объекты

...