java - UseCompressedOops JVM 标志有什么作用,我应该什么时候使用它?

标签 java memory jvm jvm-hotspot

HotSpot JVM 标志 -XX:+UseCompressedOops 有什么作用,我应该什么时候使用它?在 64 位 Java 实例上使用它(与不使用它相比)时,我会看到什么样的性能和内存使用差异?

最佳答案

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

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

总之不要开启,使用默认开启的版本。


更新:

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

关于java - UseCompressedOops JVM 标志有什么作用,我应该什么时候使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11054548/

相关文章:

java - 从 JVM 调用 CLR 代码

java - 与JSE JavaDoc相比,可以存在哪些类层次结构差异?

Java EE Jar 文件共享

java - java中的字符串函数

c++ - 使用 MMX 指令处理字符串

c - 我在 c 中的 realloc() 做错了什么?

php - 脚本完成后如何强制PHP释放内存

java - 即时编译器如何优化 Java 并行流?

java - 尝试将文件上传到 Amazon S3 时返回错误代码 400

java - 如何在 android 的后者边界内的另一个应用程序内打开一个应用程序?