Cờ HotSpot JVM -XX:+UseCompressedOops
làm gì và tôi nên sử dụng nó khi nào? Tôi sẽ thấy sự khác biệt về hiệu suất và mức sử dụng bộ nhớ nào khi sử dụng nó trên phiên bản Java 64-bit (so với không sử dụng nó)?
Cờ HotSpot JVM -XX:+UseCompressedOops
làm gì và tôi nên sử dụng nó khi nào? Tôi sẽ thấy sự khác biệt về hiệu suất và mức sử dụng bộ nhớ nào khi sử dụng nó trên phiên bản Java 64-bit (so với không sử dụng nó)?
Câu trả lời:
Hầu hết các HotSpot JVM trong năm ngoái đều đã bật tính năng này theo mặc định. Tùy chọn này cho phép các tham chiếu là 32 bit trong JVM 64 bit và truy cập gần 32 GB của heap. (hơn 32-bit con trỏ có thể) (Bạn cũng có thể có gần như không giới hạn bộ nhớ heap). Điều này có thể tiết kiệm một lượng bộ nhớ đáng kể và có khả năng cải thiện hiệu suất.
Nếu bạn muốn sử dụng tùy chọn này, tôi khuyên bạn nên cập nhật lên phiên bản có tính năng này theo mặc định vì có thể có lý do chính đáng, chẳng hạn như lỗi, tại sao nó không được bật trước đây. Hãy thử Java 6 cập nhật 23 hoặc Java 7 cập nhật 5.
Nói tóm lại, đừng bật nó lên, hãy sử dụng một phiên bản được bật theo mặc định.
Cập nhật:
Trong Java 8, bạn có tùy chọn để đặt -XX:ObjectAlignmentInBytes=
và trên thực tế, nếu kích thước heap của bạn thành 64 GB, nó sẽ sử dụng -XX:ObjectAlignmentInBytes=16
và vẫn sử dụng tham chiếu 32 bit.
JE cache
Điều này là do nó không thể giải quyết được liệu bạn có đang sử dụng nén hay không vì một số lý do. Tôi có thể nghĩ ra một vài phương pháp có thể cho bạn biết điều này btw. Bạn không cần chỉ định nó trên dòng lệnh IMHO trừ khi bạn muốn JVM không thành công nếu nó không được kích hoạt. ví dụ như bạn có một đống GB 64 trên Java 8.