Какие проблемы с предварительным размещением объектов в Java? - PullRequest
8 голосов
/ 01 марта 2010

Мы потратили последние несколько месяцев на настройку нашего производственного приложения, чтобы у нас не было полноценных ГХ. Сейчас мы наблюдаем только молодые GC, причем процент молодых GC зависит от скорости выделения объектов.

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

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

Ответы [ 2 ]

3 голосов
/ 01 марта 2010

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

3 голосов
/ 01 марта 2010

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

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

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