深入理解Java内存与垃圾回收调优(3)

EC和EU:这些列展示了Eden区当前空间大小和使用情况(单位KB)。注意:EU的大小一直在增大。而且只要大小接近EC时,就会触发Minor GC并且EU将会减小。

OC和OU:这些列展示了年老代当前空间大小和当前使用情况���单位KB)。

PC和PU:这些列展示了Perm Gen(永久代)当前空间大小和当前使用情况(单位KB)。

YGC和YGCT:YGC这列显示了发生在年轻代的GC事件的数量。YGCT这列显示了在年轻代进行GC操作的累计时间。注意:在EU的值由于minor GC导致下降时,同一行的YGC和YGCT都会增加。

FGC和FGCT:FGC列显示了发生Full GC事件的次数。FGCT显示了进行Full GC操作的累计时间。注意:相对于年轻代的GC使用时间,Full GC所用的时间长很多。

GCT:这一列显示了GC操作的总累计时间。注意:总累计时间是YGCT和FGCT两列所用时间的总和(GCT=YGCT+FGCT)。

jstat的优点,我们同样可以在没有GUI的远程服务器上运行jstat。注意:我们是通过 -Xmn10m 选项来指定S0C、S1C和EC的总和为10m的。

Java VisualVM及Visual GC插件

如果你想在GUI里查看内存和GC,那么可以使用jvisualvm工具。Java VisualVM同样是JDK的一部分,所以你不需要单独去下载。

在终端运行jvisualvm命令启动Java VisualVM程序。一旦启动程序,你需要从Tools->Plugins选项安装Visual GC插件,就像下面图片展示的。

深入理解Java内存与垃圾回收调优

安装完Visual GC插件后,从左边栏打开应用并把视角转到Visual GC部分。你将会得到关于JVM内存和垃圾收集详情,如下图所示。

深入理解Java内存与垃圾回收调优

Java垃圾回收调优

Java垃圾回收调优应该是提升应用吞吐量的最后一个选择。在你发现应用由于长时间垃圾回收导致了应用性能下降、出现超时的时候,应该考虑Java垃圾收集调优。

如果你在日志里看到

java.lang.OutOfMemoryError: PermGen space错误,那么可以尝试使用 -XX:PermGen 和 -XX:MaxPermGen JVM选项去监控并增加Perm Gen内存空间。你也可以尝试使用

-XX:+CMSClassUnloadingEnabled并查看使用CMS垃圾收集器的执行性能。

如果你看到了大量的Full GC操作,那么你应该尝试增大老年代的内存空间。

全面垃圾收集调优要花费大量的努力和时间,这里没有一尘不变的硬性调优规则。你需要去尝试不同的选项并且对这些选项进行对比,从而找出最适合自己应用的方案。

这就是所有的Java内存模型和垃圾回收内容。希望对你理解JVM内存和垃圾收集过程有所帮助。

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f62800610f36e52679edd61dbcdfc152.html