Không gian cố định là gì?


88

Trong khi tìm hiểu về cấu hình bộ nhớ java, tôi vẫn thấy thuật ngữ "không gian cố định" ngoài "heap." Tôi biết đống là gì - không gian cố định là gì?


13
Java 8 đã hoàn toàn loại bỏ khái niệm này và chuyển sang Metaspace
pramodc84

2
Tham khảo được giải thích tốt ở đây youtube.com/watch?v=PUUJ4rNpRhU
shareef

Câu trả lời:


103

Nó là viết tắt của thế hệ vĩnh viễn :

Thế hệ vĩnh viễn đặc biệt vì nó chứa siêu dữ liệu mô tả các lớp người dùng (các lớp không phải là một phần của ngôn ngữ Java). Ví dụ về siêu dữ liệu như vậy là các đối tượng mô tả các lớp và phương thức và chúng được lưu trữ trong Thế hệ vĩnh viễn. Các ứng dụng có cơ sở mã lớn có thể nhanh chóng lấp đầy phân đoạn này của heap, điều này sẽ gây ra java.lang.OutOfMemoryError: PermGen bất kể -Xmx của bạn cao bao nhiêu và bạn có bao nhiêu bộ nhớ trên máy.


Andrew, tôi chỉ tò mò muốn biết về kích thước của PerGen là gì?
gks

Chỉ cần tò mò nếu permgen là một phần của bộ nhớ heap (như đã nêu trong câu trả lời này) hay nó là off-heap (như đã nêu trong câu trả lời này - stackoverflow.com/a/31103100/3061686 ).
akki

25

Perm spaceđược sử dụng để giữ thông tin cho các lớp đã tải và một số tính năng nâng cao khác như String Pool(để kiểm tra tính bình đẳng chuỗi được tối ưu hóa cao), thường được tạo bằng String.intern()các phương thức. Vì ứng dụng của bạn (số lớp) sẽ phát triển, không gian này sẽ nhanh chóng bị lấp đầy, vì việc thu gom rác trên Không gian này không hiệu quả lắm để dọn dẹp theo yêu cầu, bạn sẽ nhanh chóng nhận được lỗi Out of Memory: perm gen space. Sau đó, không có ứng dụng nào sẽ chạy trên máy đó một cách hiệu quả ngay cả khi có một JVM trống lớn.

Trước khi bắt đầu ứng dụng của bạn, bạn nên java -XX:MaxPermSizeloại bỏ lỗi này.


Nhóm chuỗi được chuyển sang không gian heap kể từ java 7.
Caffeine Coder

20

Câu trả lời đơn giản (và đơn giản hóa quá mức): đó là nơi jvm lưu trữ dữ liệu kế toán của riêng nó, trái ngược với dữ liệu của bạn.


17

Perm Gen là viết tắt của thế hệ vĩnh viễn chứa thông tin siêu dữ liệu về các lớp.

  1. Giả sử nếu bạn tạo một tên lớp A, biến thể hiện của nó sẽ được lưu trữ trong bộ nhớ heap và lớp A cùng với bộ nạp lớp tĩnh sẽ được lưu trữ trong thế hệ vĩnh viễn.
  2. Những người thu gom rác sẽ gặp khó khăn trong việc xóa hoặc giải phóng không gian bộ nhớ được lưu trữ trong bộ nhớ thế hệ vĩnh viễn. Do đó, bạn nên giữ cài đặt bộ nhớ permgen ở mức giới hạn khuyến nghị.
  3. JAVA8 đã giới thiệu khái niệm được gọi là tạo không gian siêu lớn, do đó không còn cần thiết permgen khi bạn sử dụng phiên bản jdk 1.8.

5

Không gian permgen là vùng chứa tất cả dữ liệu phản chiếu của chính máy ảo, chẳng hạn như các đối tượng lớp và phương thức.


3

Nó chứa những thứ như định nghĩa lớp, nhóm chuỗi, v.v. Tôi đoán bạn có thể gọi nó là siêu dữ liệu.


3

Không gian Permgen luôn được gọi là vùng phương thức, khi hệ thống con của trình nạp lớp sẽ tải tệp lớp (mã byte) vào vùng phương thức (permGen). Nó chứa tất cả siêu dữ liệu của lớp, ví dụ: Tên đủ điều kiện của lớp của bạn, Tên đủ điều kiện của lớp cha trực tiếp, thông tin biến, thông tin về hàm tạo, thông tin nhóm hằng số, v.v.


2

Những gì tồn tại trong PremGen: Khu vực lớp học nằm trong khu vực PremGen. Các trường tĩnh cũng được phát triển tại thời điểm tải lớp, vì vậy chúng cũng tồn tại trong PremGen. Vùng Constant Pool có tất cả các trường bất biến được gộp chung như String được giữ ở đây. Ngoài ra, dữ liệu lớp được tải bởi bộ tải lớp, mảng đối tượng, các đối tượng bên trong được sử dụng bởi jvm cũng được định vị.


1

PermGen Space là viết tắt của phân bổ bộ nhớ cho thế hệ vĩnh viễn Tất cả các đối tượng bất biến của Java đều thuộc thể loại này, giống như Stringđược tạo bằng các ký tự hoặc với String.intern()các phương thức và để tải các lớp vào bộ nhớ. PermGen Space tăng tốc độ tìm kiếm bằng chuỗi của chúng tôi.


1
  • JVM có một đại diện bên trong của các đối tượng Java và những đại diện bên trong đó được lưu trữ trong heap (trong thế hệ trẻ hoặc thế hệ có hiệu lực).
  • JVM cũng có một đại diện bên trong của các lớp Java và chúng được lưu trữ trong thế hệ vĩnh viễn

nhập mô tả hình ảnh ở đây

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.