2012-06-13 8 views
13

Bạn bè,PermGen và Heap, Sự khác biệt và ý nghĩa của chúng

Bạn có thể vui lòng cho tôi ý nghĩa, khác biệt và cách sử dụng cho Heap và PermGen. Cũng sẽ tốt hơn khi biết lớp nào được tải trong chúng tương ứng.

Giải thích liên quan đến đặc điểm kỹ thuật Java VM sẽ thực sự hữu ích

Cảm ơn Punith

+0

Tham khảo câu hỏi liên quan này: http://stackoverflow.com/questions/2070791/young-tenured-and-perm-generation/33994430#33994430 –

Trả lời

21

Bộ nhớ (Heap) được quản lý trong nhiều thế hệ hoặc các nhóm bộ nhớ chứa các đối tượng ở các độ tuổi khác nhau. Thu gom rác xảy ra trong mỗi thế hệ khi thế hệ đầy lên. Đối tượng được phân bổ trong một thế hệ cho các đối tượng trẻ hơn hoặc young generation, và vì tỷ lệ tử vong trẻ sơ sinh hầu hết các đối tượng chết ở đó.

Khi bất kỳ đối tượng mới nào được xây dựng, nó sẽ chuyển đến không gian Eden là một phần của Young Generation.

Nếu đối tượng vẫn còn hoạt động sau một thời gian, nó sẽ chuyển đến tenured generation nơi các đối tượng sống lâu nằm.

Nếu đối tượng được cho là sống cho đến khi quá trình tồn tại thì đối tượng được chuyển đến Perm Generation. Java classes được lưu trữ trong thế hệ vĩnh viễn.

0

Tôi không có chuyên gia, nhưng bộ nhớ PermGem nằm trong Heap, vì nó giống như một nơi đặc biệt nơi tất cả các lớp được tải khi chạy. Vì vậy, nếu bạn có quá nhiều lớp, PermGem sẽ ném ra một OutOfMemoryException. Và heap lưu trữ các đối tượng bạn instanciate bên trong mã java của bạn, nơi GC thu thập các đối tượng không được tham chiếu bởi bất kỳ biến nào trong một thread đang chạy trong ngăn xếp.

+2

Điều đó không đúng. PerGen là một tách biệt với không gian heap. kiểm tra (điều này) [https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation] – Santosh

+0

vâng, bạn là chính xác. Tôi không chắc chắn là tôi đã đọc khác nhưng nó có ý nghĩa vì những gì họ có nghĩa là để đạt được với tách nó là để GC không kiểm tra dữ liệu vĩnh viễn, vì vậy nó chỉ kiểm tra đống cho "những thứ" mà ông có thể thu thập. –

0

Tôi tin rằng Permgen là vùng bộ nhớ trong bộ nhớ Heap. Nó được tạo ra cho mục đích đặc biệt như giữ String.

Tất cả các đối tượng được tạo không nhận được bộ nhớ Permgen Nó chỉ dành cho clasess đặc biệt như String trong JDK 6 hoặc thấp hơn.

Trong các phiên bản JDK hiện đại như 8 trở lên, Pergen không được tìm thấy tuy nhiên bộ nhớ mới như Non Heap và các bộ nhớ cache khác được giới thiệu.