- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE
PAGE 3
JDK6内存泄露定位方法 – jmap
编写java程序最为方便的地方就是我们不需要管理内存的分配和释放,一切由jvm来进行处理,当java对象不再被应用时,等到堆内存不够用时,jvm 会进行垃圾回收,清除这些对象占用的堆内存空间,如果对象一直被应用,jvm无法对其进行回收,创建新的对象时,无法从Heap中获取足够的内存分配给对 象,这时候就会导致内存溢出。而出现内存泄露的地方,一般是不断的往容器中存放对象,而容器没有相应的大小限制或清除机制。容易导致内存溢出。 当服务器应用占用了过多内存的时候,如何快速定位问题呢?现在,Eclipse MAT的出现使这个问题变得非常简单。Eclipse MAT是著名的SAP公司贡献的一个工具,可以在Eclipse网站下载到它,完全免费的。 ??? 要定位问题,首先你需要获取服务器jvm某刻内存快照。jdk自带的jmap可以获取内存某???时刻的快照,导出为dmp文件后,就可以用Eclipse MAT来分析了,找出是那个对象使用内存过多,使用命令为:$JAVA_HOME/bin/jmap -dump:format=b,file=String 进程号 下面用一个实例来演示内存溢出,然后通过Eclipse MAT定位出导致内存溢出的对象。 public class LeafMap { private Map leafMap = new HashMap(); public void test() { int i = 0; while(true) { System.out.println(fo); //循环往leafMap放入值,每个value的大小为1m。 leafMap.put(String.valueOf(i++), new byte[1024*1024]); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { new LeafMap().test(); while(true) {} } } Window JVM默认最大堆大小为64m,所以上面程序循环60次就出现内存溢出: 为了获取内存快照数据,不会让程序运行到内存溢出,大概循环到50以上就可以。首先通过JDK自带的jps命令。获取正在执行java进程号,如下图,LeafMap的运行进程号为:1716。 接着我们就可以通过jmap获取内存某刻的快照: jmap -dump:format=b,file=f:/mdt/dmp/1716.bin 1716 打开mat,【File】-【Open Heap Dump】导入dump文件,自动分析dump数据显示如下图: 切换到Histogram视图页面,点击点击标题头排序后发现byte数组占用内存f非常大,50多兆。 在byte[]行上,点击右键。在右键菜单选择【Show objects of class】-【by incoming references】,弹出一个新窗口,显示byte数组引用关系,展开如果下图: 从图中可以看到有多个地方存在byte数组,但只有HashMap对象占用比较大,有55个class java.util.HashMap$Entry对象,每个对象大小超过1m,而HashMap在LeafMap中被使用。因此我们可以定位到 LeafMap存在内存泄露的风险。 在实际使用当中,可以获取多个时刻的内存快照,进行前后比较,如果某一对象前后一直在增长,说明该处存在内存泄露的可能。
您可能关注的文档
- 845路现状羊坊村-南礼士路线长24.4公里调整后羊坊.ppt
- 93年图书资讯编目规范研习会.ppt
- AC13803路任意波形发生板.doc
- ACM国际大学生程式设计竞赛ACMInternationalCollegiateProgramming.ppt
- android系统平板电脑,其中内置身份证读卡器功能使身份证.doc
- ARM与COS-Ⅱ第五讲COS-Ⅱ移植分析和系统初始化.ppt
- IDL用户培训教程.doc-固体微结构研究室.doc
- III软体介绍.doc
- IIS8(WindowsServer2012)配置运行通达OA2013指南.doc.doc
- ATCA设备电信级整机测试用例.doc
- 广东省深圳市龙岗区德琳学校初中部2022-2023学年七年级上学期期中考试英语试题(原卷版+解析).docx
- 广东省珠海市第四中学、立才学校、梅华中学2022-2023学年七年级上学期期中质量检测英语试题(原卷版+解析).docx
- 教科版2024-2025学年六年级科学上册第一单元第4课时《生物细胞》同步练习(含答案).docx
- 牛津沪教版七年级英语上册单元速记•巧练 Unit 7 【单元测试 · 提高卷】.docx
- 牛津沪教版七年级英语上册单元速记•巧练 Unit 5【单元测试 · 基础卷】.docx
- 广东省深圳市南山区太子湾学校2022-2023学年七年级上学期期中考试英语试题(原卷版+解析).docx
- 广东省深圳市南山第二外国语学校(集团)2022-2023学年七年级上学期期中考试英语试题(含听力)(原卷版+解析).docx
- 牛津沪教版七年级英语上册单元速记•巧练 2023-2024学年七年级上学期期末英语全真模拟卷(深圳适用02).docx
- 广东省阳江市江城区2022-2023学年七年级上学期期中考试英语试题(原卷版+解析).docx
- 广东省梅州市梅县区宪梓中学2022-2023学年七年级上学期期中英语试题(原卷版+解析).docx
文档评论(0)