当前位置: 首页 > 网络应用技术

Java内存分析工具垫(Memiry Analyzer工具)

时间:2023-03-07 20:40:11 网络应用技术

  MAT(内存分析仪工具),基于Eclipse的跨平台内存分析工具,是一种快速且功能性的Java Heap分析工具。它读取运行应用程序时Java生成的环境生成的存储文件快照。它可以帮助我们找到内存泄漏并减少内存消耗。使用内存分析工具来分析许多对象,快速计算内存中对象的大小,查看谁停止了垃圾收集器的回收利用,并可以通过该报告直观地检查结果,从而导致可能导致此结果的结果。

  官方网站地址:https://www.eclipse.org/mat/。

  内存分析仪可以使用HPROF二进制堆转储文件,IBM系统转储文件(处理后)和IBM Portable Heap Dump S(PHD)文件中的IBM Portable Heap Dump S(PHD)文件。我可以通过内存分析仪直观地在Heap Dump Files中看到:

  官方下载地址:https://www.eclipse.org/mat/downloads.php。

  下载后,解压缩,您可以看到文件并打开它。

  有很多方法可以获取堆转储文件。通常,参数配置是在特定条件下配置的,以触发堆拨盘,也可以通过工具获得。通用命令的方法如下:

  我们编写一个简单的代码,该周期创建UUID字符串缝合并将其添加到列表中:

  设置启动参数,最大内存为4M,并自动保留堆转储:

  运行程序后,迅速抛出了OOM,并自动生成堆转储文件:

  默认位置在项目目录下方:

  让我们从下面开始分析!

  双击文件并打开:

  单击文件,打开堆可以选择一个堆转储文件,我们选择刚刚生成的文件。

  选择打开模式,我们选择第一个模式,即分析内存泄漏,单击完成以调用堆转储文件:

  共同选择的含义:

  转储文件越大,打开的时间越长。打开后,概述接口如下。概述视图显示了此转储文件摘要的信息,并显示了一些常用的功能:

  让我们看一下其他常见功能。

  直方图直方图,用于显示每种类型的实例数,以及浅大小和保留大小:

  当您正确地单击任何对象时,您会看到drop -down菜单。如果选择“ ListObjects”菜单项,则可以查看传出参考和传入参考的传出参考。

  不通电引用是指当前对象的对象,即传出引用是指当前对象引用的对象。对象的对象保证对象活着以避免被垃圾回收;传出参考显示对象内的特定内容,这有助于我们分析对象的属性。

  让我们看一下第一个最大的char []不断参考:

  可以看出,它们几乎由字符串对象的值属性引用。实际上,此字符串是我们剪接的UUID字符串。

  列出堆转储中活动状态中最大的对象。默认值按保留大小进行排序,因此很容易找到占据最多内存的对象。

  排名最大的对象是占据最多内存的对象。树中的子节点是对象直接或间接引用的对象(这意味着将对象回收时将被回收)。

  定位OOM时,它是直接主要树的最大对象。在我们的Domina的主导树中,Arraylist占据了最大的内存。这是由OOM引起的。

  单击上方的黄色齿轮以生成堆转储文件的线程视图。线程概述以查看线程的操作和抛出的异常分析。

  结果在我们的头转储中的线程概述,结果如下。显然,OutofMemoryError被主线程抛出:

  MAT分析了堆转储文件并检测到内存泄漏的可能性,例如一个或一组异常的对象。Leak可疑嫌疑人用于生成可疑的内存泄漏分析报告,这非常有用,可以帮助我快速定位OOM。

  在我们的堆转储中检查线程概述。结果,如果您不确定OOM的原因,那么您可以直接告诉您:

  可以看出,66.79%的内存被对象[]数组占据,因此很可疑。记忆溢出很可能很可能是很可能。单击详细信息以查看详细信息:

  您可以看到集合中存储的大量UUID字符串。实际上,已经告诉我们,内存是否溢出。我们可以在详细信息的底部看到:

  这是这个大对象(列表设置了数组存储的元素),因为需要连续内存,并且需要内存不足。

  在这一点上,分析已完成!