< p > HotSpot JVM 标志
-XX:+UseCompressedOops
是什么?何时应该使用它?在 64 位 Java 实例上使用它(与不使用)会产生什么样的性能和内存使用差异?< /p >-XX:+UseCompressedOops
是什么?何时应该使用它?在 64 位 Java 实例上使用它(与不使用)会产生什么样的性能和内存使用差异?< /p >大多数 HotSpot JVM 在过去一年中默认开启了此选项。该选项允许 64 位的 JVM 中引用为 32 位,并且可以接近使用 32 GB 的堆内存(超过 32 位指针能够达到的)。同时,您还可以使用不受限制的离堆内存。这样做可以显著地节省内存并潜在地提高性能。
如果您想使用此选项,建议更新到默认开启它的版本,因为此前可能由于存在错误等原因而未启用。尝试使用 Java 6 update 23 或 Java 7 update 5。
简而言之,请勿手动开启此选项,使用默认开启它的版本即可。
更新:
在 Java 8 中,您可以设置 -XX:ObjectAlignmentInBytes=
。如果您的堆大小为 64 GB,则将使用 -XX:ObjectAlignmentInBytes=16
并仍然使用 32 位引用。
JE cache
,那么这是推荐的。因为由于某些原因,它无法确定你是否使用了压缩 oops。顺便说一下,我可以想到几种方法来告诉你这个信息。在我看来,除非你想让 JVM 在未启用时失败,否则不需要在命令行上指定它。例如,在 Java 8 上有一个64 GB堆。 - Peter Lawrey