-XX: MaxPermSize làm gì?


260

Cụ thể, tại sao nó sẽ giúp khắc phục sự cố PermGen OutOfMemoryError?

Ngoài ra, điểm thưởng cho một câu trả lời chỉ cho tôi tài liệu về các đối số JVM ...



6
oracle.com/technetwork/java/javase/tech/ Nhật Bạn sẽ cho tôi những điểm thưởng như thế nào bây giờ? :)
Denys Séguret

1
@PaulTomblin Tôi không chắc anh chàng có bài viết mà bạn đang liên kết đến (kết quả đầu tiên của Google) có bất kỳ ý tưởng nào về những gì anh ấy đang nói.
Denys Séguret

@dystroy Tôi có thể gửi cho bạn một cookie? Hoặc bạn chỉ có thể hài lòng với một câu hỏi được trả lời tốt;)
Geoff

5
Điều này không trả lời cụ thể câu hỏi nhưng nếu bạn đang xem quản lý bộ nhớ JVM, các bài viết hay nhất tôi đã đọc về nó là đâyliên kết thông tin này
Abe

Câu trả lời:


274

Không gian cố định là nơi các lớp, phương thức, chuỗi nội bộ và các đối tượng tương tự được sử dụng bởi VM được lưu trữ và không bao giờ bị hủy bỏ (do đó là tên).

Bài viết này của Oracle trình bày ngắn gọn về hoạt động và tham số hóa của HotSpot GC và khuyên bạn nên tăng dung lượng này nếu bạn tải nhiều lớp (đây thường là trường hợp cho các máy chủ ứng dụng và một số IDE như Eclipse):

Thế hệ vĩnh viễn không có tác động đáng chú ý đến hiệu suất của bộ thu gom rác đối với hầu hết các ứng dụng. Tuy nhiên, một số ứng dụng tự động tạo và tải nhiều lớp; ví dụ, một số triển khai của các trang JavaServer Pages (JSP). Các ứng dụng này có thể cần một thế hệ vĩnh viễn lớn hơn để giữ các lớp bổ sung. Nếu vậy, kích thước tạo vĩnh viễn tối đa có thể được tăng lên với tùy chọn dòng lệnh -XX: MaxPermSize =.

Lưu ý rằng tài liệu Oracle khác này liệt kê các đối số HotSpot khác.

Cập nhật: Bắt đầu với Java 8, cả không gian permgen và cài đặt này đều biến mất. Mô hình bộ nhớ được sử dụng cho các lớp và phương thức được tải là khác nhau và không bị giới hạn (với cài đặt mặc định). Bạn không nên thấy lỗi này nữa.


93

-XX:PermSize -XX:MaxPermSize được sử dụng để đặt kích thước cho Thế hệ vĩnh viễn.

Thế hệ vĩnh viễn: Thế hệ vĩnh viễn là nơi lưu giữ các tệp lớp. Đây là kết quả của các lớp được biên dịch và các trang JSP. Nếu không gian này đầy, nó sẽ kích hoạt Bộ sưu tập Rác đầy đủ. Nếu Bộ sưu tập Rác đầy đủ không thể dọn sạch các lớp cũ không được ước tính và không còn chỗ để mở rộng Không gian cố định, lỗi Out Bộ nhớ (OOME) sẽ bị ném và JVM sẽ bị sập.


48

Trong Java 8, tham số đó thường được sử dụng để in một thông báo cảnh báo như thế này:

Cảnh báo máy chủ 64-bit Java HotSpot (TM): bỏ qua tùy chọn MaxPermSize = 512m; hỗ trợ đã bị xóa trong 8.0

Lý do tại sao bạn nhận được thông báo này trong Java 8 là vì Permgen đã được thay thế bởi Metaspace để giải quyết một số nhược điểm của PermGen (như bạn có thể tự mình nhìn thấy, một trong những nhược điểm đó là nó có kích thước cố định).

FYI: một bài viết về Metaspace: http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html


6
Xem thêm: Loại bỏ PermGen trong JDK 8 (stackoverflow).
sẽ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.