Một định nghĩa nhanh chóng của các "thế hệ vĩnh viễn":
"Thế hệ lâu dài được sử dụng để giữ dữ liệu phản chiếu của VM tự như các đối tượng lớp và phương pháp đối tượng Những đối tượng phản xạ là . được phân bổ trực tiếp vào thế hệ vĩnh viễn và có kích thước là độc lập với các thế hệ khác. " [ref]
Nói cách khác, đây là nơi định nghĩa lớp đi (và điều này giải thích lý do tại sao bạn có thể nhận được thông báo OutOfMemoryError: PermGen space
nếu một ứng dụng tải một số lượng lớn các lớp học và/hoặc trên tái triển khai).
Lưu ý rằng PermSize
là bổ sung cho các giá trị -Xmx
thiết lập bởi người sử dụng vào các tùy chọn JVM. Nhưng MaxPermSize
cho phép JVM có thể phát triển PermSize
với số tiền được chỉ định. Ban đầu khi VM được tải, MaxPermSize
sẽ vẫn là giá trị mặc định (32mb cho -client
và 64mb cho -server
) nhưng sẽ không thực sự chiếm số tiền đó cho đến khi cần. Mặt khác, nếu bạn đã thiết lập CẢ PermSize
và MaxPermSize
tới 256MB, bạn sẽ nhận thấy rằng các đống tổng thể đã tăng thêm 256MB bổ sung cho các thiết lập -Xmx
.
Nguồn
2009-10-28 00:02:57
Giá trị mặc định là 64m đối với máy ảo 64 bit. Chúng tôi tăng nó lên '512m' cho một máy chủ tomcat chạy 8 ứng dụng đường ray.'-XX: MaxPermSize = 512m -XX: PermSize = 512m'. Tomcat với nhiều định nghĩa lớp chính nó cần một PerSize lớn và với ruby, ruby trên đường ray kết hợp với jruby .. cần một PermSize rất lớn. –
Lưu ý rằng các thế hệ Vĩnh viễn (và với các tham số PermSize) sẽ biến mất trong Java 8. Chúng được thay thế bằng "Metaspace". Xem http://javaeesupportpatterns.blogspot.co.uk/2013/02/java-8-from-permgen-to-metaspace.html – sleske