2012-08-10 34 views
0

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

+3

在您的链接页面上,您的问题未得到解答,问题是“融合的JVM是否会获得允许JRockit在Windows上分配更多堆的功能?” – 2012-08-10 10:10:34

回答

2

我认为你问的是非连续的堆,因为你正在遭受内存碎片。很多时候你的32位地址空间是分段的,但你的64位地址空间不是。这意味着,如果您的计算机具有足够的内存,则使用64位JVM将允许您查找32位JVM不会访问的连续内存。当32位JVM未能分配超过2GB的堆时,我个人使用64位JVM来分配超过4GB的堆。

虽然它看起来不像任意的非连续堆,但它使它成为JDK 7,您可以尝试使用G1垃圾回收器。根据http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html

堆被划分为一组大小相等的堆区域,每个虚拟存储器的连续范围的。

从理论上讲,这可以让你玩一个非连续的堆。唯一的限制是地区必须具有相同的规模。

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

-XX:G1HeapRegionSize =正:随着G1 Java堆被细分成均匀大小的区域。这设定了各个子部门的大小。该参数的默认值根据堆大小以人体工程学方式确定。最小值为1Mb,最大值为32Mb。

我希望这会有所帮助。

+0

听起来不错,但我做了一些测试,它表现相同。他们可能意味着连续的堆被分割以获得更好的GC。 但有些奇怪。我指定1g和visualVM显示我最多2g ... – Stroboskop 2014-07-29 17:22:01