簡體   English   中英

Java 7和8中的32位堆優化

[英]32bit heap optimization in Java 7 and 8

如果我錯了請糾正我,但據我所知,從Oracle HotSpot JVM 1.7開始,64位版本的JVM不能再以“32位”模式運行(-d32命令行參數)。

我聽說,如果JVM進程配置的最大堆小於32Gb,JVM會通過保留32位指針等自動優化內存使用量。這是正確的嗎? 這仍然適用於64位Oracle HotSpot JVM嗎? 如果是,我該如何關閉此行為並禁用32位內存優化?

謝謝!

除了這里提供的答案之外, UseCompressedOops JVM標志做了什么以及何時應該使用它?

64位版本的JVM不能再以“32位”模式運行

64位JVM只能以64位模式運行。

我聽說,如果JVM進程配置的最大堆小於32Gb,JVM會通過保留32位指針自動優化內存使用情況,

當堆小於32 GB(GB =千兆字節,Gb =千兆位)時,JVM在Java 6,7和8中默認使用壓縮的Oops。

JVM使用32位引用,它是實際數據的索引。 即使用的數字可能會經歷重要的翻譯,成為實際的指針。 您可以使用Unsafe.getInt()查看此索引。

Compressed Oops Java 8的默認限制為64 GB,您可以通過更改對象對齊將其增加到128 GB,但由於丟失了太多內存以填充,因此很少這樣做。

這仍然適用於64位Oracle HotSpot JVM嗎? 如果是,我該如何關閉此行為並禁用32位內存優化?

它適用於Oracle JVM和OpenJDK,您可以使用-XX:-UseCompressedOops關閉它-XX:-UseCompressedOops但我無法想象您為什么-XX:-UseCompressedOops

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM