Способен ли JIT оптимизировать распределение памяти?
1 ответ
Есть несколько очень специфических случаев, когда JIT может удалить выделения и, следовательно, снизить нагрузку на GC. Главным образом с анализом побега. В принципе, если объект живет только в рамках одного метода и никогда не покидает его, он может быть размещен в стеке, а не в куче, что уменьшает работу сборщика мусора. Если вы хотите знать наверняка: вы можете отключить Escape-анализ: используйте аргумент командной строки -XX:-DoEscapeAnalysis
и посмотрите, изменится ли график.
Однако есть много других самонастраивающихся механизмов. Как система во время выполнения замечает, что вам не нужно так много памяти, и, следовательно, начинает уменьшать размер кучи. Ваш график будет соответствовать этому. Поскольку большая часть памяти всегда может быть освобождена, система памяти уменьшает размер кучи: с более частыми, но меньшими GC.