Для распределений как на куче, так и вне кучи. On-heap - в контексте трех основных сборщиков мусора: CMS, Parallel Old и G1.Понимание внутренних свойств фрагментации процесса JVM Hotspot
То, что я знаю (или думаю, что я знаю) на данный момент:
- все объект распределения (по-куче) округлены до 8 байт границы (или большей мощности 2, сконфигурированной
-XX:ObjectAlignmentInBytes
. - G1
- Для на-кучи распределений меньше размера области (от 1 до 32 МБ, вероятно, около размеров кучи/2048) нет внутренней фрагментации, потому что нет никакой необходимости, потому что распределитель никогда «Заполняет дыры».
- Для распределений большего размера региона он округляет выделение до размера региона. I. e. распределение размер области + 1 байт очень неудачный, он тратит почти 50% памяти.
Для CMS, единственная соответствующая информация, которую я нашел,
Естественно старой космической PLABs имитировать структуру индексированного списка свободного пространства. В каждом потоке выделяется определенное количество блоков каждого размера ниже 257 кучных слов (большой кусок выделен из глобального пространства).
От http://blog.ragozin.info/2011/11/java-gc-hotspots-cms-promotion-buffers.html. Насколько я понимаю, «глобальное пространство» - это основное старое пространство.
Вопросы:
- ли вышеприведенные утверждения правильно?
- Каковы свойства фрагментации основного старого пространства в CMS? А как насчет выделения более 257 кучи слов?
- Как управлять старым пространством с помощью Parallel Old GC?
- Содержит ли Hotspot JVM распределитель системной памяти для распределений вне кучи, или он перенаправляет его с помощью специального распределителя?
UPD. Обсуждение темы: https://groups.google.com/forum/#!topic/mechanical-sympathy/A-RImwuiFZE
Почему вы хотите заняться? Помните, что этот материал изменяется от реализации к реализации и от обновления до обновления. Если вы пытаетесь оптимизировать, я думаю, что самая лучшая статья может быть самой современной. 2011 год был давным-давно. – markspace
Google - ваш друг (используйте инструменты поиска -> в течение одного года): [Март 2015 JVM GC Tunning Guide] (https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/) – markspace
@markspace Я прочитал это перед публикацией. В этом руководстве ничего не говорится о внутренней фрагментации. – leventov