java代码结构分析工具 java代码结构分析工具怎么用( 七 )


怎么查看java代码是否内存泄露第一阶段 通过jdkjava代码结构分析工具的GC输出进行测试
可以在 JAVA_OPTS增加以下参数打开jdkjava代码结构分析工具的GC输出日志java代码结构分析工具:
-verbose:gc -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError
打开输出日志,jdk会在每一次java代码结构分析工具的垃圾回收时打印相关日志
第二阶段 通过jmap命令
jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建 , 检查系统中什么对象最多,各种对象所占内存的大小等等
第三阶段 通过Eclipse Memory Analyzer 分析工具来分析
Eclipse Memory Analyzer是一种快速的,功能丰富的Java堆分析工具,以下简称MAT,可以帮助查找内存泄露,并减少内存消耗 。这个工具可以对由堆转储产生的数以亿计的对象进行分析,一旦堆转储被解析,可以在打开他的一瞬间,立即得到保留大小的单一对象,提取记录详细的信息,查看为什么这些对象对象资料没有被释放掉 。使用这些功能的报告,可以对这些对象进行跟踪,找到内存泄露嫌疑人,也可以得到系统的性能指数,帮助优化系统 。
java内存诊断软件?对于每一个java进程来说都有自己的内存池和使用空间,而这也就意味着会出现内存使用错误等问题,而这时候我们就需要对java内存进行诊断分析,今天云南java培训就一起来了就一下,在进行内存诊断上都有哪些软件可以使用 。
Java堆:分析诊断数据
堆转储分析
堆转储可以使用如下的工具进行分析:
EclipseMAT(内存分析工具,MemoryAnalyzerTool)是一个社区开发的分析堆转储的工具 。它提供了一些很棒的特性,包括:
可疑的泄漏点:它能探测堆转储中可疑的泄露点,报告持续占有大量内存的对象;
直方图:列出每个类的对象数量、浅大小(shallow)以及这些对象所持有的堆 。直方图中的对象可以很容易地使用正则表达式进行排序和过滤 。这样有助于放大并集中我们怀疑存在泄露的对象 。它还能够对比两个堆转储的直方图,展示每个类在实例数量方面的差异 。这样能够帮助我们查找Java堆中增长快的对象,并进一步探查确定在堆中持有这些对象的根;
【java代码结构分析工具 java代码结构分析工具怎么用】不可达的对象:MAT有一个非常棒的功能,那就是它允许在它的工作集对象中包含或排除不可达/死对象 。如果你不想查看不可达的对象,也就是那些会在下一次GC周期中收集掉的对象,只关心可达的对象,那么这个特性是非常便利的;
重复的类:展现由多个类加载器所加载的重复的类;
到GC根的路径:能够展示到GC根(JVM本身保持存活的对象)的引用链,这些GC根负责持有堆中的对象;
OQL:我们可以使用对象查询语言(ObjectQueryLanguage)来探查堆转储中的对象 。它丰富了OQL的基础设施,能够编写复杂的查询 , 帮助我们深入了解转储的内部 。
JavaVisualVM:监控、分析和排查Java语言的一站式工具 。它可以作为JDK工具的一部分来使用,也可以从GitHub上下载 。它所提供的特性之一就是堆转储分析 。它能够为正在监控的应用创建堆转储,也可以加载和解析它们 。从堆转储中 , 它可以展现类的直方图、类的实例,也能查找特定实例的GC根;
jhat命令工具(在/bin文件夹中)提供了堆转储分析的功能,它能够在任意的浏览器中展现堆转储中的对象 。默认情况下,Web服务器会在7000端口启动 。jhat支持范围广泛的预定义查询和对象查询语言,以便于探查堆转储中的对象;

推荐阅读