Bu sınıf yükleyici bellek sızıntısı. Uygulamayı yeniden her paylaştığınızda, bunun için yeni bir sınıf yükleyicisi oluşturulur ve uygulamanızın tüm sınıfları yeniden yüklenir. Bu perm gen uzayında bellek tüketir.
Eski sınıf yükleyici ve yüklü tüm sınıfların toplanması gerekir, aksi halde birden çok kez dağıtıldıktan sonra bir PermGen alanına ODE olarak girersiniz. Bir dış sınıf yükleyicisi tarafından yüklenen bir nesne, eski sınıf yükleyici tarafından yüklenen herhangi bir nesneye başvuruda bulunursa, bu çalışmaz. This article, sorunun iyi bir açıklamasını verir. Genel olarak, sınıf yükleyici sızıntılarını analiz etmek zordur ve bazen düzeltilmesi zordur. Eski sınıf yükleyicilerin neden toplanmadığını öğrenmek için bir profiler kullanmalısınız. JProfiler'da yığın yürütücüyü kullanın, glassfish classloader nesnelerini seçin ve çöp toplayıcı köklerine giden yolları kontrol etmek için gelen referans görünümünü kullanın.
Sınıf yükleyici sınıfı org.apache.servlet.jasper.JasperLoader
olarak adlandırılır. İşte, sınıf yükleyicisinin sadece yüklü nesnelerin canlı örnekleri tarafından tutulduğu, düzenli bir durumun ekran görüntüsüdür. senin durumda
, dışarıda nesnelere başvurularını görmelisiniz. Bir webloader sızıntısının web konteynırlarındaki diğer bir yaygın nedeni, durdurulmayan bir arka plan iş parçacığıdır. Google Guice, örneğin, 3.0'da böyle bir hatadır.
(Yasal Uyarı: benim şirket JProfiler gelişir) (linux tabanlı os değil) bu sorunu çözmek için
Bu şeye bakıyorsunuz: http://stackoverflow.com/questions/1996088/java-class-permgen-memory-leak-web-applications-generic-solution – Raedwald