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ì?
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ì?
Câu trả lời:
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.
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:MaxPermSize
loại bỏ lỗi này.
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.
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.
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ị.
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.