Каковы проблемы с предварительным выделением объектов в Java?

Мы провели последние несколько месяцев, настраивая наше производственное приложение так, чтобы мы не испытывали полного GCs. Мы теперь испытываем молодой GCs только с уровнем молодежи GCs, зависящий от уровня объектного выделения.

Наше приложение должно быть максимально близко к "в реальном времени" поэтому теперь, мы пытаемся сократить количество молодого GCs. Когда старая аксиома идет, большинство данных, которые мы выделяем, заканчивает тем, что было мусором и отброшенный в следующем молодом GC. Так никакая потребность предварительно выделить для этого типа данных. Однако существует хорошая сумма объектов (определенный типом), что мы знаем, сделает его от молодого GC до старого GC.

Имело бы смысл предварительно выделять эти объекты в течение более идеальных времен (т.е. при запуске), таким образом, мы закончим тем, что выделили меньше в течение наших времен далеких от идеального? Я считал литературу, которая упоминает, как пулинг объектов не рекомендуется с последним JVMs, потому что выделение является намного более дешевым. То, что недостатки к предварительному выделению объектов, которые я знаю, доберется до старого GC?

8
задан 1 March 2010 в 16:39
поделиться

2 ответа

Обратите внимание, что существует jvm в реальном времени . Если вашему приложению требуется предсказуемая производительность, на это стоит обратить внимание.

3
ответ дан 5 December 2019 в 22:18
поделиться

Уменьшение скорости выделения делает GC «паузы» менее частыми, но не короче. Для более плавной работы «в реальном времени» вы можете фактически захотеть увеличить количество вызовов GC: это требует больше ЦП, связанного с GC, чтобы получить более короткие паузы. JVM Sun можно настроить с помощью различных параметров ; Я предлагаю попробовать -XX: NewRatio , чтобы уменьшить молодое поколение.

Обычный аргумент против объединения состоит в том, что вы в основном пытаетесь написать свой собственный распределитель, надеясь, что вы справитесь с ним лучше, чем распределитель JVM. Это оправдано в некоторых конкретных случаях, когда размещение стоит дорого, например создание экземпляров Thread .

3
ответ дан 5 December 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: