java - JDK 7 使用非连续堆吗?

标签 java java-7 jvm-hotspot jrockit

我知道 JDK 7 应该是 hotspot 和 jrockit 之间的合并,并且不会有 jrockit 1.7。 (来源:https://blogs.oracle.com/henrik/entry/java_7_questions_answers)我有一个项目需要jrockit的非连续堆功能以及一些java 1.7功能,所以既然JDK 7是合并,它是否支持非连续堆,因为我找不到官方文件这么说?

最佳答案

我假设您正在询问非连续堆,因为您正遭受内存碎片的困扰。很多时候,32 位地址空间是碎片化的,但 64 位地址空间却不是。这意味着,如果您的计算机有足够的内存,使用 64 位 JVM 将允许您找到 32 位 JVM 无法找到的连续内存。我个人曾使用 64 位 JVM 来分配超过 4GB 的堆,而 32 位 JVM 无法分配超过 2GB 的堆。

尽管 JDK 7 中似乎没有出现任意非连续堆,但您可以尝试使用 G1 垃圾收集器。根据http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html :

The heap is partitioned into a set of equal-sized heap regions, each a contiguous range of virtual memory.

从理论上讲,这允许您使用非连续堆。唯一的限制是区域大小必须相等。

根据http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/G1GettingStarted/index.html#t6您可以使用此命令行选项来控制区域大小:

-XX:G1HeapRegionSize=n: With G1 the Java heap is subdivided into uniformly sized regions. This sets the size of the individual sub-divisions. The default value of this parameter is determined ergonomically based upon heap size. The minimum value is 1Mb and the maximum value is 32Mb.

我希望这会有所帮助。

关于java - JDK 7 使用非连续堆吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11899468/

相关文章:

java - 在 JDK7 中使用 Spring 的 @Scheduled 时,出现有关 Repeatable class not found 的 Sonar 错误消息

java - 用于访问 JDK 8 HotSpot JVM 中字符串池内容的实用程序

java - 有什么方法可以重定向 native JVM 输出的输出,例如 -XX :+PrintCompilation

java - 在Android上通过OkHttp连接到websocket时如何捕获UnknownHostException?

java - 将 Stax XML 写入 ObjectOutputStream(socket.getOutputStream) 时出现 MalformedByteSequenceException

java - 无法理解如何在 java 中定义列表列表

java - 通过简单地添加方法参数(更精简的 jit 代码),无法解释的 10% 以上的性能提升

java - 停止请求焦点的 jframe

java - 方法声明无效;返回类型需要第 10 + 14 行修复后的附加错误

java - 调试停止的 RxJava zip 运算符