使用MemoryAnalyzertool(MAT)分析内存泄漏(一).doc

使用MemoryAnalyzertool(MAT)分析内存泄漏(一).doc

ID:53877564

大小:591.00 KB

页数:14页

时间:2020-04-10

使用MemoryAnalyzertool(MAT)分析内存泄漏(一).doc_第1页
使用MemoryAnalyzertool(MAT)分析内存泄漏(一).doc_第2页
使用MemoryAnalyzertool(MAT)分析内存泄漏(一).doc_第3页
使用MemoryAnalyzertool(MAT)分析内存泄漏(一).doc_第4页
使用MemoryAnalyzertool(MAT)分析内存泄漏(一).doc_第5页
使用MemoryAnalyzertool(MAT)分析内存泄漏(一).doc_第6页
使用MemoryAnalyzertool(MAT)分析内存泄漏(一).doc_第7页
使用MemoryAnalyzertool(MAT)分析内存泄漏(一).doc_第8页
使用MemoryAnalyzertool(MAT)分析内存泄漏(一).doc_第9页
使用MemoryAnalyzertool(MAT)分析内存泄漏(一).doc_第10页
资源描述:

《使用MemoryAnalyzertool(MAT)分析内存泄漏(一).doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、使用MemoryAnalyzertool(MAT)分析内存泄漏(一) 前言 在平时工作过程中,有时会遇到OutOfMemoryError,我们知道遇到Error一般表明程序存在着严重问题,可能是灾难性的。所以找出是什么原因造成OutOfMemoryError非常重要。现在向大家引荐EclipseMemoryAnalyzertool(MAT),来化解我们遇到的难题。如未说明,本文均使用Java5.0onWindowsXPSP3环境。 为什么用MAT 之前的观点,我认为使用实时profiling/monitoring之类的工具,用一种非常

2、实时的方式来分析哪里存在内存泄漏是很正确的。年初使用了某profiler工具测试消息中间件中存在的内存泄漏,发现在吞吐量很高的时候profiler工具自己也无法响应,这让人很头痛。后来了解到这样的工具本身就要消耗性能,且在某些条件下还发现不了泄漏。所以,分析离线数据就非常重要了,MAT正是这样一款工具。 为何会内存溢出 我们知道JVM根据generation(代)来进行GC,根据下图所示,一共被分为younggeneration(年轻代)、tenuredgeneration(老年代)、permanentgeneration(永久代,p

3、ermgen),permgen(或称Non-Heap非堆)是个异类,稍后会讲到。注意,heap空间不包括permgen。绝大多数的对象都在younggeneration被分配,也在younggeneration被收回,当younggeneration的空间被填满,GC会进行minorcollection(次回收),这次回收不涉及到heap中的其他generation,minorcollection根据weakgenerationalhypothesis(弱年代假设)来假设younggeneration中大量的对象都是垃圾需要回收,mi

4、norcollection的过程会非常快。younggeneration中未被回收的对象被转移到tenuredgeneration,然而tenuredgeneration也会被填满,最终触发majorcollection(主回收),这次回收针对整个heap,由于涉及到大量对象,所以比minorcollection慢得多。 JVM有三种垃圾回收器,分别是14throughputcollector,用来做并行younggeneration回收,由参数-XX:+UseParallelGC启动;concurrentlowpausecollec

5、tor,用来做tenuredgeneration并发回收,由参数-XX:+UseConcMarkSweepGC启动;incrementallowpausecollector,可以认为是默认的垃圾回收器。不建议直接使用某种垃圾回收器,最好让JVM自己决断,除非自己有足够的把握。 Heap中各generation空间是如何划分的?通过JVM的-Xmx=n参数可指定最大heap空间,而-Xms=n则是指定最小heap空间。在JVM初始化的时候,如果最小heap空间小于最大heap空间的话,如上图所示JVM会把未用到的空间标注为Virtual

6、。除了这两个参数还有-XX:MinHeapFreeRatio=n和-XX:MaxHeapFreeRatio=n来分别控制最大、最小的剩余空间与活动对象之比例。在32位SolarisSPARC操作系统下,默认值如下,在32位windowsxp下,默认值也差不多。参数默认值MinHeapFreeRatio40MaxHeapFreeRatio70-Xms3670k-Xmx64m由于tenuredgeneration的majorcollection较慢,所以tenuredgeneration空间小于younggeneration的话,会造成频

7、繁的majorcollection,影响效率。ServerJVM默认的younggeneration和tenuredgeneration空间比例为1:2,也就是说younggeneration的eden和survivor空间之和是整个heap(当然不包括permgen)的三分之一,该比例可以通过-XX:NewRatio=n参数来控制,而ClientJVM默认的-XX:NewRatio是8。至于调整younggeneration空间大小的NewSize=n和MaxNewSize=n参数就不讲了,请参考后面的资料。 younggenera

8、tion中幸存的对象被转移到tenuredgeneration,但不幸的是concurrentcollector线程在这里进行majorcollection,而在回收任务结束前空间被耗尽了,这时将会发生FullColle

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。