用 verbose GC 分析 IBM WebSphere Portal 的内存问题
2010-06-23 00:00:00 来源:WEB开发网这一行显示了每个循环运行的时长。mark 阶段 422 ms,sweep 阶段 37 ms,compact 阶段 0 ms。
此外,通过如下两点,我们可以知道这不是一个完整的 GC:
compact 阶段的完成花了 0 ms。
action=1 表明这是在完整 GC 运行之前的一个抢占式的 GC。
最后要研究的一行是:
<GC(177): refs: soft 0 (age >= 32), weak 11, final 7424, phantom 0>
我们必须首先理解这个 GC 不仅管理对象,而且还会维护对实际对象的一个单独的引用对象。这些引用与创建时的四个查询中的一个相关,并且这种相关性在日后不能更改。这四个查询在 mark 阶段按如下顺序标记:
Soft
Weak
Final
Phantom
Soft 和 weak 引用在引用不复存在时可被清除。如果一个 finalizer(Final 查询)与一个 soft 或 weak 引用相关,那么只有当这个 soft 或 weak 引用删除后,这个 finalizer 才会在所运行的下一个 GC pass 上被删除。
以上所述就是在 Java SDK 1.4.2 上的默认 GC 策略内能看到的一些主要行。有了这些基础,让我们接下来探索 JVM 是如何工作的。
JVM 的生命周期
JVM 的开始部分一般是一些用来启动进程的可选命令行参数。这些参数是添加到 WebSphere Application Server 管理控制台内的原生 JVM 参数。
如下是一个基本命令,它会在 Java 进程开始时执行:
Java –Xmx1024M –Xms256M –Xverbosegc programToRun
其中的命令行参数
–Xmx1024M –Xms256M –Xverbosegc
表明启动时如下事情会发生:
heap 最大为 1024 M (–Xmx1024M)
heap 最小为 256 M (–Xms256M)
更多精彩
赞助商链接