Per Tôi sẽ không coi PermGen là một phần đặc biệt của heap.
Tôi muốn nghĩ nhiều về vùng heap như một vùng bộ nhớ dành riêng để lưu trữ các cá thể đối tượng trong khi PermGen là khu vực dành riêng để lưu trữ các định nghĩa lớp. Kết quả là vòng đời của một heap được gắn với một ứng dụng trong khi vòng đời của PermGen được gắn với một JVM.
Một trong những ví dụ tốt nhất tại sao một ứng dụng và JVM của nó có thể có vòng đời khác nhau trong một thùng chứa Java EE. Trong một máy chủ ứng dụng, các ứng dụng có thể được triển khai và không được triển khai mà không cần khởi động lại máy chủ. Trong quá trình không triển khai (hoặc redeployment), thật dễ dàng để giải phóng tất cả các cá thể đối tượng tức là không gian heap, nhưng khá khó để xóa tất cả các lớp được nạp bởi ứng dụng này từ PermGen vì một số lớp vẫn có thể được JVM tham chiếu.
Một trong các trường hợp như vậy là Leaking Drivers. Khi một ứng dụng được triển khai, một trình điều khiển JDBC được nạp và đăng ký với DriverManager. Khi ứng dụng này không được triển khai, DriverManager tồn tại và giữ một tham chiếu đến trình điều khiển, trình nạp lớp gốc của nó và mọi thứ mà trình nạp lớp này đã nạp. Kết quả là, rò rỉ bộ nhớ trong PermGen được tạo ra, nhưng nó không có lỗi trong quản lý bộ nhớ của ứng dụng.
Đúng là các JVM như JRocket không có PermGen, mọi thứ đều được lưu trữ trong heap. Chỉ trong ngữ cảnh như vậy bạn mới có thể gọi PermGen là "phần đặc biệt" của đống. Thậm chí sau đó, chúng ta vẫn nên xem PermGen và đống khác nhau vì chúng có mục đích rất khác nhau và chúng có các loại rò rỉ bộ nhớ rất khác nhau.
Cập nhật: Trong JDK 8 của Oracle, PermGen là replaced by "Metaspace" và giờ đây chính thức là một phần của vùng heap. Chúng tôi sẽ không cần phải điều chỉnh riêng PermGen nữa.
Nguồn
2013-06-03 03:13:19
Liên kết bạn đã cho biết "phân đoạn của đống" - vì vậy nó thực sự là "một phần đặc biệt của ngăn xếp"? Nó sẽ làm cho ý nghĩa hơn nhiều cho nó là một phần của đống (hoặc thậm chí một số loại phân đoạn dữ liệu tĩnh) chứ không phải là ngăn xếp mà chỉ là không phù hợp cho loại điều đó. –
Nó là một phần đặc biệt của heap. Tôi đã chỉnh sửa câu trả lời của tôi trước khi bạn nhận xét, nhưng tôi đánh giá cao sự điều chỉnh anyway :) – Olhovsky
bất kỳ đề xuất về câu hỏi thứ hai? – Gareth