您的位置:首页 > 编程语言 > Java开发

标题: 优化 Java 垃圾收集的性能——如何利用 IBM Java 虚拟机检测和解决垃圾收集问题

2011-10-09 18:42 901 查看
标题: 优化 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 应用程序的其他所有线程(除了垃圾收集帮助器线程之外)都被挂起。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐