Какая бесплатная реализация JVM имеет лучшую обработку PermGen?

Интерфейсы являются отличным способом выделения компонентов для целей модульного тестирования и общего управления зависимостями. Сказав это, я часто предпочитаю абстрактные классы, поэтому, по крайней мере, часть общего поведения выгружается туда, а не заставляет некоторые дубликаты, которые приносят интерфейсы. Современные IDE позволяют быстро и легко создавать интерфейсы, поэтому они не , что много работают: -)

7
задан Community 23 May 2017 в 12:14
поделиться

6 ответов

Я согласен с Майклом Боргвардтом в том, что вы можете увеличить размер PermGen, я не согласен, что это в первую очередь из-за утечек памяти. Пространство PermGen агрессивно поглощается приложениями, интенсивно использующими Reflection. Так что в основном, если у вас есть приложение Spring / Hibernate, работающее в Tomcat, будьте готовы значительно увеличить пространство PermGen.

7
ответ дан 6 December 2019 в 10:52
поделиться

Смена JVM - не панацея. Вы можете столкнуться с новыми неожиданными проблемами (например, см. статью о запуске приложения под 4 различными JVM).

  • У вас может быть утечка класса (например, через загрузчики классов), что чаще всего происходит при повторном развертывании. Честно говоря, я никогда не видел работающего горячего повторного развертывания на Tomcat (надеюсь когда-нибудь увидеть).
  • У вас могут быть неправильные параметры JVM (например, для Sun JDK 6 64 бит -XX: + UseParNewGC switch приводит к утечке сегмента памяти PermGen .Если вы добавите дополнительные ключи: -XX: + UseConcMarkSweepGC -XX: + CMSClassUnloadingEnabled-XX: + CMSPermGenSweepingEnabled, ситуация будет разрешена. Забавно, но я никогда не встречал вышеупомянутой утечки с Sun JDK 6 32 бита). Ссылка на статью «Настройка сборки мусора JVM для производственных развертываний».

    [ОБНОВЛЕНО]

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

3
ответ дан 6 December 2019 в 10:52
поделиться

Что подсказало вам, что JVM Sun ограничена 128M PermGen? Вы можете свободно установить его с помощью параметра командной строки -XX: MaxPermSize; по умолчанию - 64 МБ.

Однако настоящая причина вашей проблемы, вероятно, связана с утечкой памяти в вашем приложении, которая не позволяет классам собирать мусор; они могут быть очень тонкими, особенно когда задействованы загрузчики классов, поскольку все, что требуется, - это одна ссылка на любой из классов в любом месте. Эта статья подробно описывает проблему, а эта предлагает способы ее решения.

5
ответ дан 6 December 2019 в 10:52
поделиться

Технически пул памяти PermGen - это JVM Sun. Другие JVM не называют это так, но все они имеют представление об одном или нескольких пулах памяти без кучи.

Но если у вас есть проблема с permgen в вашей Sun JVM, переход на другую JVM вряд ли что-то решит, он просто проявится под другим именем.

Если несколько повторных развертываний вызывают ваши проблемы, просто увеличьте PermGen виртуальной машины до больших значений. Некоторое время назад мы пробовали JRockit из-за этой самой проблемы, и он страдает от того же недостатка повторного развертывания. Мы вернулись к SUn JVM.

3
ответ дан 6 December 2019 в 10:52
поделиться

Я использую JRockit и все равно получаю ошибки PermGen, если я не увеличиваю (с помощью -XX: MaxPermSize) объем памяти. Я также ничего не могу заставить работать, чтобы избежать этого (кроме увеличения).

0
ответ дан 6 December 2019 в 10:52
поделиться

Perm gen, вероятно, самая простая в обращении память, я сомневаюсь, что между различными реализациями vm будет большая разница .

Убедитесь, что все те конфигурации Tomcat, которые отмечены как выключенные в производственной среде, отключены в производственной среде.

Да, некоторые фреймворки, которые действительно генерируют много классов на лету, но они должны убирать за собой, и, в любом случае, вы можете уместить больше, чем несколько классов в 128 Мбайт.

Серьезно, если perm gen продолжает расти, то утечку следует исправить, хотя это может не быть вашей проблемой.

Убедитесь, что все конфигурации Tomcat, помеченные как выключенные в производственной среде, отключены в производственной среде.

Да, некоторые фреймворки, которые действительно генерируют много классов на лету, но они должны убирать за собой, и в любом случае, вы можете уместить больше, чем несколько классов в 128 Мбайт.

Серьезно, если perm gen продолжает расти, то утечку следует исправить, хотя это может не быть вашей проблемой.

Убедитесь, что все конфигурации Tomcat, помеченные как выключенные в производственной среде, отключены в производственной среде.

Да, некоторые фреймворки, которые действительно генерируют много классов на лету, но они должны убирать за собой, и в любом случае, вы можете уместить больше, чем несколько классов в 128 Мбайт.

Серьезно, если perm gen продолжает расти, то утечку следует исправить, хотя это может не быть вашей проблемой.

0
ответ дан 6 December 2019 в 10:52
поделиться
Другие вопросы по тегам:

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