là rò rỉ bộ nhớ lớp loader này. Mỗi lần bạn triển khai lại ứng dụng, trình nạp lớp mới được tạo cho nó và tất cả các lớp của ứng dụng của bạn được nạp lại. Điều này tiêu thụ bộ nhớ trong không gian gen perm.
Trình nạp lớp cũ và tất cả các lớp được tải của nó phải được thu thập rác, nếu không bạn cuối cùng sẽ chạy vào một không gian PermGen OOME sau khi triển khai nhiều lần. Điều này không hoạt động nếu một đối tượng được nạp bởi một trình nạp lớp bên ngoài giữ một tham chiếu đến bất kỳ đối tượng nào được nạp bởi trình nạp lớp cũ. This article giải thích rõ vấn đề.
Nói chung, rò rỉ bộ nạp lớp khó phân tích và đôi khi khó khắc phục. Để tìm hiểu lý do tại sao các trình nạp lớp cũ không phải là rác được thu thập, bạn phải sử dụng một trình thu thập thông tin. Trong JProfiler, sử dụng bộ đệm đường dẫn, chọn đối tượng trình nạp lớp thủy tinh và sử dụng chế độ xem tham chiếu đến để kiểm tra đường dẫn đến rễ thu gom rác.
Lớp trình tải lớp được gọi là org.apache.servlet.jasper.JasperLoader
. Dưới đây là một ảnh chụp màn hình của một tình huống thường xuyên, nơi trình nạp lớp chỉ được tổ chức bởi các cá thể trực tiếp của các đối tượng được nạp.

Trong trường hợp của bạn, bạn sẽ thấy tài liệu tham khảo từ các đối tượng bên ngoài. Một nguyên nhân phổ biến khác của sự rò rỉ bộ nạp lớp trong các thùng chứa web là một luồng nền không bị dừng lại. Google Guice chẳng hạn có lỗi như vậy trong 3.0.
(Disclaimer: công ty tôi phát triển JProfiler)
Nguồn
2011-10-07 09:54:45
Đây có phải là những gì bạn đang tìm kiếm: http://stackoverflow.com/questions/1996088/java-class-permgen-memory-leak-web-applications-generic-solution – Raedwald