首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

OutOfMemoryError 分析历程

2012-11-01 
OutOfMemoryError 分析过程最近在研究JVM优化方面的知识,今天就顺便用JVM的查看工具测试了一下当发生OutOf

OutOfMemoryError 分析过程

最近在研究JVM优化方面的知识,今天就顺便用JVM的查看工具测试了一下当发生OutOfMemoryError的时候如何通过工具来分析出错原因。

需要的工具Eclipse Memory Analyzer。

1.在eclipse的run argument中输入以下VM参数(关于Xms,Xmx,Xmn的具体含义参考http://unixboy.iteye.com/blog/174173)。设置了堆空间为20M,年轻代为10M。通过参数-XX:+HeapDumpOnOutOfMemoryError指定发生OutOfMemoryError的时候dump下内存(文件名为java_pid〈进程ID〉.hprof)。通过参数 -XX:+PrintGCDetails -Xloggc:gc.log设置程序输出gc的信息到gc.log文件。

OutOfMemoryError 分析历程

2.以下为java代码

总结:Memery Analyzer是一个很好的分析工具,在程序运行的时候可以通过Jmap dump下内存,然后通过它来分析。

? 一个问题是,垃圾回收动作何时执行?

当年轻代内存满时,会引发一次普通GC,该GC仅回收年轻代。需要强调的时,年轻代满是指Eden代满,Survivor满不会引发GC当年老代满时会引发Full GC,Full GC将会同时回收年轻代、年老代当永久代满时也会引发Full GC,会导致Class、Method元信息的卸载

? 另一个问题是,何时会抛出OutOfMemoryException,并不是内存被耗空的时候才抛出

JVM98%的时间都花费在内存回收每次回收的内存小于2%

热点排行