Изменение сборки мусора с Java 1.4 на Java 6?

Недавно мы обновили одно из наших приложений с Java 1.4 до Java 6.

С некоторыми При нагрузочных тестах и ​​тестах производительности мы заметили, что доступная память в Java 6 в целом оставалась на гораздо более низком уровне, чем в Java 1.4.

После некоторого профилирования приложения с помощью Java 6 мы заметили, что многие объекты, на которые больше не ссылаются никакие другие объекты (т.е. кандидаты на сборку мусора), остаются в памяти и, по-видимому, никогда не собирались сборщиком мусора. Мы восприняли это как объяснение меньшего объема доступной памяти.

Вопрос: изменилось ли поведение сборки мусора с Java 1.4 на Java 6?

6
задан b.roth 20 August 2010 в 09:06
поделиться

3 ответа

изменилось ли поведение сборки мусора с Java 1.4 на Java 6?

Определенно!

От Java 1.4 до Java 6 - довольно большой промежуток времени (почти 5 лет между первоначальными выпусками ] и более 8 лет между первоначальным выпуском 1.4 и текущий выпуск Java 6 , согласно этой вики-статье ).

За это время применяется множество изменений и оптимизаций, и вам не стоит особо беспокоиться, пока ваша программа все еще работает.

Увеличение объема используемой памяти означает лишь то, что JVM не тратит время на сборку мусора, когда в этом нет необходимости. Если вы хотите, чтобы он использовал меньше памяти, вам следует уменьшить максимальную кучу (или иным образом настроить параметры JVM; эта статья объясняет, как это сделать в Java 5, большая часть советов все еще применима).

Будет несколько иначе, если вы действительно получите OutOfMemoryError , которого не получали ранее. Затем вам следует проверить, как вы используете слабые и мягкие ссылки, или, в крайнем случае, попытаться выяснить, не обнаружена ли у вас ошибка JVM.

15
ответ дан 8 December 2019 в 05:19
поделиться

Было несколько оптимизаций по сбору мусора между 1.4 и 5 и между 5 и 6

у oracle / sun есть несколько официальных документов о различиях в производительности в Интернете.

http://java.sun.com/performance/reference/whitepapers/5.0_performance.html#2.11

http://java.sun.com/performance/reference/whitepapers/6_performance.html#2.2

5
ответ дан 8 December 2019 в 05:19
поделиться

Java SE сильно изменилась за 8 лет.

Что касается сборщика мусора, то он был значительно улучшен в Java SE 6. В Java SE 6 Update 14 был представлен новый Garbage First GC.

3
ответ дан 8 December 2019 в 05:19
поделиться
Другие вопросы по тегам:

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