每个Java进程都有自己的内存池和使用空间,这意味着会出现内存使用错误等问题。此时我们需要对Java内存进行诊断和分析。今天,昌平Java培训正在进行中。有什么软件可以进行内存诊断。
Java堆:分析来自诊断
堆转储分析
堆转储可以使用以下方法进行分析工具:
EclipseMAT(MemoryAnalyzerTool)是社区开发的用于分析堆转储的工具。它提供了一些有趣的功能,包括:可疑泄漏:它检测堆转储中的可疑泄漏,持续报告内存中的大量对象;
柱状图:列出每个类的对象数量、浅(shallow)大小以及这些对象所占用的堆。可以使用正则表达式轻松对直方图对象进行排序和过滤。这使我们能够放大并专注于我们怀疑的泄漏。它还比较两个堆转储的直方图,显示每个类的实例数量的差异。这可以帮助我们找到Java堆中快速增长的对象,并进一步探索以确定堆中包含这些对象的根;
对象不可访问:MAT有一个很好的功能,即它允许在其工作对象中包含或排除不可访问/死亡对象。如果您不想查看不可访问的对象,即将在下一个GC周期中收集的对象,而只担心可访问的对象,那么此功能非常方便;
重复类:显示多个类加载器加载的重复类;
GC根路径:可以显示GC根的引用字符串(保持活动状态的对象)由JVM本身),这些GCroot负责将对象保留在堆中;
OQL:我们可以使用对象查询语言(ObjectQueryLanguage)来探索堆转储中的对象。它丰富了OQL基础设施,允许我们编写复杂的查询,并帮助我们更好地理解转储的内部组件。
JavaVisualVM:用于监视、分析Java语言并排除故障的独特工具。它作为JDK工具的一部分提供,也可以从GitHub下载。它提供的功能之一是堆转储分析。它能够创建受监控应用程序的堆转储,以及加载和分析它们。从堆中,它可以显示类、类实例的直方图,还可以找到特定实例的GC根;jhat命令(在/bin文件夹中)提供堆转储分析功能,可以在任何浏览器中显示堆转储对象。默认情况下,Web服务器将在端口7000上启动。jhat支持多种预定义查询和对象查询语言,以便更轻松地解析堆转储中的对象;
JavaMissionControl的JOverflow插件(JavaMissionControl):这是一个实验性插件,允许JavaMissionControl执行简单的堆转储分析并报告可能的内存浪费;
您的工具包是一个商业Javaprofiler,它有一个堆转储分析器,并且具有其他工具提供的几乎所有功能。另外,YourKit还提供了:
可达性范围:它不仅可以列出可访问和不可访问的对象,还可以根据可访问范围显示它们的分布,即高度可访问、弱/软可访问或不可访问;
内存分析器:YourKit有而不是一整套内置查询。使用即席查询功能,YourKit查询可以探测内存、查找反模式并分析常见内存问题的原因和解决方案。
如何查看正在运行的Java程序的最大内存消耗(包括虚拟机)和CPU消耗(毫秒):
使用jdk附带的工具。
在命令行中输入。
将出现一个窗口。
根据进程号选择要监控的虚拟机。
>可以看到内存占用情况、线程情况以及各种对象定义。
上一篇:java应用内存使用率
下一篇:java内存使用率过高怎么办