Tôi đang cố gắng tạo các lớp và tải chúng vào thời gian chạy.
Tôi đang sử dụng đối tượng ClassLoader
để tải các lớp. Vì tôi không muốn hết bộ nhớ PermGen
, đôi khi tôi không tham khảo bộ nạp lớp và tạo bộ nạp mới để tải các lớp mới sẽ được sử dụng. Điều này có vẻ hoạt động tốt và tôi không nhận được PermGen
hết bộ nhớ. Vấn đề là khi tôi làm điều đó, sau một thời gian tôi nhận được lỗi sau:Tránh Permagen hết bộ nhớ và giới hạn vượt quá GC vượt quá
java.lang.OutOfMemoryError: GC overhead limit exceeded
Vì vậy, câu hỏi của tôi là, khi tôi nên bỏ tham khảo các bộ nạp lớp để tránh cả hai lỗi ?:
Tôi có nên theo dõi trong mã của tôi, việc sử dụng PermGen
để tôi không tham chiếu đến trình nạp lớp học và gọi số System.gc()
khi sử dụng PermGen
gần với giới hạn?
Hoặc tôi có nên làm theo một cách tiếp cận khác không?
Cảm ơn
Tôi đang sử dụng jvisualvm để giám sát việc sử dụng đống, kích thước tối đa là 1 Gb và mức sử dụng thay đổi từ 200 mb đến 600 mb, vì vậy nó nằm ngoài giới hạn. – otonakav
@otonakav - có thể có một số vấn đề với thông số điều chỉnh GC của bạn. –