UseCompressedOops JVM标志是做什么的,什么时候应该使用它?

热点JVM标志-XX:+UseCompressedOops做什么,我应该什么时候使用它? 在64位Java实例上使用它(而不是使用它)时,我会看到什么样的性能和内存使用差异?

去年的大多数HotSpot JVM都默认启用它。 此选项允许引用在64位JVM中为32位,并可访问接近32 GB的堆。 (超过32位的指针可以)(你也可以有近乎无限的堆内存)。 这可以节省大量的内存并可能提高性能。

如果你想使用这个选项,我build议你更新到一个默认的版本,因为可能有一个很好的原因,如错误,为什么以前没有启用。 尝试Java 6更新23或Java 7更新5。

总之,不要打开它,使用一个默认情况下启用它的版本。


更新:

在Java 8中,您可以select设置-XX:ObjectAlignmentInBytes= ,事实上,如果将堆大小设置为64 GB,则将使用-XX:ObjectAlignmentInBytes=16并仍使用32位引用。