2013-10-12 24 views
5

JVM phân bổ các khu vực này trong bộ nhớ: Lớp (Phương pháp) Khu vực, Heap, Ngăn xếp, Đăng ký bộ đếm chương trình, Ngăn xếp phương thức gốc.Sự khác biệt giữa khu vực lớp học và heap

Tôi biết rằng heap được sử dụng để lưu trữ các đối tượng và ngăn xếp được sử dụng để lưu trữ các biến cục bộ và một phần kết quả. Theo định nghĩa, Lớp (Phương pháp) Khu vực lưu trữ cấu trúc mỗi lớp như hồ bơi hằng số thời gian chạy, trường và dữ liệu phương thức, mã cho các phương thức. Nhưng tôi thực sự không hiểu sự khác biệt.

Có ai vui lòng giải thích sự khác biệt giữa khu vực Lớp học và Heap không?

+1

Cần có khoảng trống để lưu trữ tất cả siêu dữ liệu về lớp học, v.v. Đây không phải là dữ liệu trong ứng dụng của bạn, nhưng chúng cần phải được lưu trữ giống nhau. – Aaron

Trả lời

9

Java 6 lưu trữ tất cả các hồ bơi liên tục và thông tin Class trong Perm Gen

Java 7 chỉ lưu trữ các thông tin trong lớp Perm Tướng Hồ bơi literal String là trên heap.

Java 8 không có Perm Gen. Các thông tin về nhóm và thông tin về lớp học đều nằm trong vùng heap.

Bạn đã giải thích sự khác biệt. Các cấu trúc lớp như các phương thức được lưu trữ trong gen perm. Dữ liệu trong mỗi cá thể được lưu trữ trong heap.

Chúng được tách ra vì các loại dữ liệu này có vòng đời rất khác nhau, ví dụ: Các đối tượng thường ngắn ngủi và các lớp thường sống rất lâu.

AFAIK Họ đang xóa nó vì quá nhiều nhà phát triển thấy nó khó hiểu.

+1

Với Java 8, có an toàn khi nói rằng không có gì giống như khu vực lớp bây giờ là định nghĩa lớp cũng được lưu trữ trên heap. –

+1

@BalkrishanNagpal nó an toàn để nói rằng Metaspace chúng tôi giống như Perm Hen nhưng với một tên khác nhau và điều chỉnh khác nhau. Nó làm điều tương tự. Không có mã trên heap. –

3

Khu vực lớp (phương pháp) lưu trữ - đó là mã của chương trình của bạn. Heap lưu trữ các cá thể đối tượng. Ví dụ:

public void MakeSomeFruit(){ 

    Fruit myFruit=new Fruit(); 

} 
  • Mã MakeSomeFruit được lưu trữ trong khu vực lớp.
  • Khi được thực hiện, phiên bản Fruit thực tế mà nó tạo ra được lưu trữ trong Heap.
  • Khi được thực hiện, biến số myFruit tham chiếu được lưu trữ trên ngăn xếp. Đó chỉ là một con số chỉ vào vị trí của cá thể trong bộ nhớ - một địa chỉ.
Các vấn đề liên quan