- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
内存泄露分析工具Memory_Analyzer_Tool(MAT)介绍.
内存泄露分析工具Memory Analyzer tool(MAT)介绍Java如何管理内存Java的内存管理就是对象的分配 和释放问题。在Java中,程序员需要通过关键字new为每个对象申请内存空间 (基本类型除外),所有的对象都在堆 (Heap)中分配空间。另外,对象的释放是由GC决定和执行的。在Java中,内存的分配是由程序完成的,而内存的释放是有GC完成的,这种收支两条线 的方法确实简化了程序员的工作。但同时,它也加重了JVM的工作。这也是Java程序运行速度较慢的原因之一。因为,GC为了能够正确释放对象,GC必须 监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等,GC都需要进行监控。监视对象状态是为了更加准确地、及时地释放对象,而释放对象的根本原则就是该对象不再被引用。为了更好理解GC的工作原理,我们可以将对象考虑为有向图的顶点,将引用关系考虑为图的有向边,有向边从引用者指向 被引对象。另外,每个线程对象可以作为一个图的起始顶点,例如大多程序从main进程开始执行,那么该图就是以main进程顶点开始的一棵根树。在这个有 向图中,根顶点可达的对象都是有效对象,GC将不回收这些对象。如果某个对象 (连通子图)与这个根顶点不可达(注意,该图为有向图),那么我们认为这个(这些)对象不再被引用,可以被GC回收。以下,我们举一个例子说明内存管理。对于程序的每一个时刻,我们都有一个有向图表示JVM的内存分配情况以下右图,就是左边程序运行到第6行的示意图。?Java 使用有向图的方式进行内存管理,可以消除引用循环的问题,例如有三个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的。这种方式的 优点是管理内存的精度很高,但是效率较低。另外一种常用的内存管理技术是使用计数器,例如COM模型采用计数器方式管理构件,它与有向图相比,精度行低 (很难处理循环引用的问题),但执行效率很高。两种常见的内存泄露1.永久保存区内存溢出java.lang.OutOfMemoryError: PermGen spaceJvm默认的永久区为4M,如果未设置启动参数,很可能由于class类太多,导致永久区爆掉.设置set JAVA_OPTS=-Xms800m -Xmx800m-XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m设置-XX:PermSize可以解决这个问题2.JVM调配使用的内存空间不足内存溢出GC可用heapsize不足2%时抛出,java.lang.OutOfMemoryError: Java heap spaceMAT工具能够解决那些问题?快速查找解决系统崩溃.能够看到系统运行情况,提前找到系统内存使用上存在的问题.如何使用先dump出内存,可以通过MAT工具分析内存使用情况,找到问题的关键.案例介绍设置jvm启动参数增加set JAVA_OPTS= -verbose:gc -Xloggc:../logs/gclog.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+HeapDumpOnOutOfMemoryError%JAVA_OPTS%加在jboss 的 run.bat 第98行.加在使用JAVA_OPTS 前面就行了其中红色标记的是内存溢出时内存状况写入到文件中.写一段非常好资源的代码.protectedvoid execute(RunData rundata, TemplateContext context) throws WebxException {this.test(); }privatevoid test(){//创建一个非常耗性能的代码 ListString ret1 = new ArrayListString(); ListString ret2 = new ArrayListString(); ListString ret3 = new ArrayListString(); ListString ret4 = new ArrayListString(); ListString ret5 = new ArrayListString(); String tmp = ;for(int j=0;j1000000;j++){ tmp = tmp+String.valueOf(j); ret1.add(tmp); ret2.add(
您可能关注的文档
- 冀教版小学语文阅读积累集锦..doc
- 冀教版数学五年级下册第四单元_分数乘法教学设计..doc
- 冀教版科学六年级上册实验及六年级科学上册复习题..doc
- 混凝土本构理论.doc
- 内业资料管理..doc
- 内冷水泵检修作业指导书..doc
- 混凝土选择题 全.doc
- 内分泌内科病历..doc
- 内分泌真题(部分天医)..doc
- 内分泌科应急预案..doc
- 量化点评报告:ERP失效后,如何锚定A股价值?-20240123-国盛证券-10页.pdf
- 金融工程资产配置系列专题:基于“宏观预期”的权益择时系统与2024年股债组合构建展望-20240123-中银证券-15页.pdf
- 金融工程深度报告:如何从ETF的提纯Alpha中学习信息-20240122-东证期货-20页.pdf
- 家用电器行业跟踪报告:重仓持股比例续升,美的获增持-20240125-万联证券-10页.pdf
- 估值与基金重仓股配置监控:哪些行业进入高估区域?-20240120-天风证券-15页.pdf
- 中班教案《打针我不怕》3篇.pdf
- 中国考古发现黄金.pdf
- 第十七单元活血化瘀药.pdf
- 大学校区宿舍粉刷工程施工组织设计方案.pdf
- 医学护理三基试题14.8皮肤病性病护理学试题(护理).pdf
文档评论(0)