У меня есть генерал перманента утечка памяти, которую я знаю. Профилирование использующий jvisualvm показывает, что при выполнении горячего развертывания (например, остановка и запускают приложение, не уничтожая JVM, у кота, WebSphere, WebLogic и т.д.) - пространство PermGen постоянно увеличивается.
После чтения, с помощью jhat, и других усовершенствованных инструментов я понял, что у меня, вероятно, есть ссылка на WebAppClassLoader
от класса где-нибудь в его загрузчиках родительского класса.
Я не мог придавить его даже при том, что я сделал некоторые значительные основанные на JavaScript запросы на jhat
Разве там простой не является утилита, которая узнает, кто ответственен за Вас, классифицируют загрузчик, который не будет собран "мусор" (таким образом позволяющий сборку "мусора" классов, загруженных им)?
Я попробовал JProfiler, jvisualvm, jhat, и много Google
всем друзьям LMGTFY - я провел форумы чтения приблизительно полутора дней с шагом со стороны инструкций по шагам, никакой удачи. Я ищу утилиту или кодирую это выводы:
Возразите, что X из класса Y являются единственным корнем GC, который мешает Вашим классам удаляться.
Есть неудовлетворительное, но простое решение: Не горячая штучка в производственных условиях. Вы можете установить кластер из двух контейнеров для сервлетов и обновлять их по одному с перезагрузкой.
Здесь тоже мало указателей, http://minmaxmim.blogspot.com/2010/01/javalangoutofmemoryerror-java-heap.html
также проверьте статью о пространстве javalangoutofmoryerror-permgen.
.Реалии частых передислокаций... Лучшее, что вы можете сделать, это увеличить размер перм гена, используя -XX:MaxPermSize=256m. Это может купить вам несколько перераспределений больше за jvm перезагрузки. Или прочитайте по адресу http://my.opera.com/karmazilla/blog/2007/03/15/permgen-strikes-back
Остерегайтесь, что если классные загрузчики вообще не могут быть gc-ed, то возиться с jvm совсем не помогут. Лучше забудьте о частых внедрениях, особенно в производстве, так как dev это удобно, тем не менее.