标题: 优化 Java 垃圾收集的性能——如何利用 IBM Java 虚拟机检测和解决垃圾收集问题
TestFocus焦点测试论坛
堆管理概述
JVM 在初始化的过程中分配堆。堆的大小取决于指定或者默认的最小和最大值以及堆的使用情况。
分配堆可能对可视化堆有所帮助。
Heapbase 表示堆底, heaptop 则表示堆能够增长到的最大绝对值。
差值( heaptop - heapbase )由命令行参数 -Xmx 决定。
该参数和其他命令行参数都是在关于 verbosegc 和命令行参数的 developerWorks 文档中描述的。
heaplimit 指针可以随着堆的扩展上升,随着堆的收缩下降。
heaplimit 永远不能超过 heaptop ,也不能低于使用 -Xms 指定的初始堆大小。
任何时候堆的大小都是 heaplimit - heapbase。
如果整个堆的自由空间比例低于 -Xminf 指定的值(minf 是最小自由空间),堆就会扩展。
如果整个堆的自由空间比例高于 -Xmaxf 指定的值(maxf 是最大自由空间),堆就会收缩。
-Xminf 和 -Xmaxf 的默认值分别是 0.3 和 0.6,因此 JVM 总是尝试将堆的自由空间比例维持在 30% 到 60% 之间。
参数 -Xmine(mine 是最小扩展大小)和 -Xmaxe(maxe 是最大扩展大小)控制扩展的增量。这4个参数对固定大小的堆不起作用(用相等的 -Xms 和 -Xmx 值启动 JVM,这意味着 HeapLimit = HeapTop),因为固定大小的堆不能扩展或收缩。
当 Java 线程请求存储时,如果 JVM 不能分配足够的存储块来满足这个请求,则可以说出现了分配失败(AF)。这时候就不可避免要进行垃圾收集。垃圾收集包括收集所有“不可达的(unreachable)”引用,以便重用它们所占用的空间。
垃圾收集由请求分配的线程执行,是一种 Stop-The-World(STW)机制;执行垃圾收集算法时,Java 应用程序的其他所有线程(除了垃圾收集帮助器线程之外)都被挂起。
1312



被折叠的 条评论
为什么被折叠?



