Chúng tôi đang viết một ứng dụng GUI lớn ở Scala với nhiều lớp và chúng tôi phải tăng không gian PermGen để có thể tải tất cả các lớp. Bản thân ứng dụng sẽ hiển thị một loạt các hoạt động dựa trên màn hình, mỗi hoạt động sẽ tải các lớp học riêng của mình. Chỉ có một hoạt động được tải/hiển thị tại bất kỳ thời điểm nào. Sau khi thực hiện một số hoạt động, chúng tôi đã có một số OutOfMemoryError
trong không gian PermGen.Tiết kiệm không gian PermGen với một số bộ nạp lớp
Tôi hiểu rằng không gian PermGen là garbage collected just like the rest of the heap, nhưng tôi quan tâm để xem liệu tôi có thể giảm không gian PermGen cần thiết bằng ví dụ hay không. một ClassLoader
cho mỗi hoạt động để cho phép xếp lớp.
Vì vậy:
- Tôi hiểu rằng lớp được nạp bởi các ClassLoader hệ thống không thể được dỡ xuống, vì họ sẽ mãi mãi được tham chiếu bởi bộ nạp lớp của họ. Điều đó có đúng không?
- Không có trường hợp nào khác của lớp được trình nạp lớp tùy chỉnh của tôi tải xuống và trình tải lớp có thể được thu thập rác, các lớp của nó sẽ được tải, giải phóng không gian PermGen?
- Có bất kỳ cảnh báo nào liên quan đến (hoặc những lỗi phổ biến có thể ngăn chặn) xếp dỡ lớp học không?
PermGen của bạn lớn bao nhiêu? –
128m quá nhỏ, 256m hoạt động bây giờ, nhưng trong bao lâu?… –