Tôi đã cài đặt JDK 8 và cố gắng chạy Eclipse. Tôi nhận được thông báo cảnh báo sau:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
Các lý do để bỏ qua tùy chọn VM này là gì?
Tôi đã cài đặt JDK 8 và cố gắng chạy Eclipse. Tôi nhận được thông báo cảnh báo sau:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
Các lý do để bỏ qua tùy chọn VM này là gì?
Câu trả lời:
Lý do bỏ qua các đối số này là thế hệ vĩnh viễn đã bị xóa trong HotSpot cho JDK8 vì những hạn chế sau
Không gian thế hệ vĩnh viễn (PermGen) đã bị xóa hoàn toàn và được thay thế bằng một không gian mới gọi là Metaspace. Hậu quả của việc loại bỏ PermGen là rõ ràng các đối số JVM của PermSize và MaxPermSize bị bỏ qua và bạn sẽ không bao giờ gặp phải lỗi java.lang.OutOfMemoryError: PermGen.
Ưu điểm của MetaSpace
Điều chỉnh Metaspace
Kích thước metaspace tối đa có thể được đặt bằng cờ -XX: MaxMetaspaceSize và mặc định là không giới hạn, điều đó có nghĩa là chỉ bộ nhớ hệ thống của bạn là giới hạn. Cờ điều chỉnh -XX: MetaspaceSize xác định kích thước ban đầu của metaspace Nếu bạn không chỉ định cờ này, Metaspace sẽ tự động thay đổi kích thước tùy theo nhu cầu ứng dụng khi chạy.
Thay đổi cho phép tối ưu hóa và các tính năng khác trong tương lai
Có cải thiện hiệu suất GC cũng. Thêm chi tiết
Đây là một trong những tính năng mới của Java 8, một phần của Đề xuất nâng cao JDK 122 :
Loại bỏ thế hệ vĩnh viễn khỏi JVM Hotspot và do đó cần điều chỉnh kích thước của thế hệ vĩnh viễn.
Danh sách tất cả các JEP sẽ được bao gồm trong Java 8 có thể được tìm thấy trên trang các cột mốc JDK8 .
Không gian thế hệ vĩnh viễn (PermGen) đã bị xóa hoàn toàn và được thay thế bằng một không gian mới gọi là Metaspace. Hậu quả của việc xóa PermGen là rõ ràng các đối số JVM của PermSize và MaxPermSize bị bỏ qua và bạn sẽ không bao giờ gặp phải java.lang.OutOfMemoryError
lỗi: PermGen.
JVM JDK 8 HotSpot hiện đang sử dụng bộ nhớ riêng để biểu diễn siêu dữ liệu lớp và được gọi là Metaspace. Đọc thêm >>
Bởi vì không gian PermGen đã bị xóa. Quản lý bộ nhớ đã thay đổi một chút.
Không gian PermGen được thay thế bởi MetaSpace trong Java 8. Các đối số JVM PermSize và MaxPermSize bị bỏ qua và cảnh báo được đưa ra nếu có khi khởi động.
Hầu hết các phân bổ cho siêu dữ liệu lớp hiện được phân bổ ra khỏi bộ nhớ riêng. * Các lớp được sử dụng để mô tả siêu dữ liệu lớp đã bị xóa.
Sự khác biệt chính giữa PermGen cũ và MetaSpace mới là, bạn không phải bắt buộc xác định giới hạn trên của việc sử dụng bộ nhớ. Bạn có thể giữ giới hạn không gian MetaSpace không giới hạn. Do đó, khi mức sử dụng bộ nhớ tăng lên, bạn sẽ không gặp phải lỗi OutOfMemoryError. Thay vào đó, bộ nhớ riêng dành riêng được tăng lên để lấp đầy toàn bộ mức tăng sử dụng bộ nhớ.
Bạn có thể xác định giới hạn không gian tối đa cho MetaSpace, và sau đó nó sẽ ném ra OutOfMemoryError: Không gian siêu dữ liệu. Do đó, điều quan trọng là xác định giới hạn này một cách thận trọng, để chúng ta có thể tránh lãng phí bộ nhớ.
Việc triển khai JVM của Java cho Java 8 đã loại bỏ mô hình PermGen và thay thế nó bằng Metaspace .