jvisualvm是jdk8的bin目录下自带的一个分析工具,在我下载的jdk11下没有这个工具,这个工具我们可以用来分析hprof文件
首先我们可以配置对应的参数,配置文件地址在\jdk8\lib\visualvm\etc\visualvm.conf
visualvm_default_options="-J-client -J-Xms1024m -J-Xmx1024m -J-Dsun.jvmstat.perdata.syncWaitMs=10000 -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.d3d=false -J-Dnetbeans.keyring.no.master=true -J-Dplugin.manager.install.global=false -J–add-exports=java.desktop/sun.awt=ALL-UNNAMED -J–add-exports=jdk.jvmstat/sun.jvmstat.monitor.event=ALL-UNNAMED -J–add-exports=jdk.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED -J–add-exports=java.desktop/sun.swing=ALL-UNNAMED -J–add-exports=jdk.attach/sun.tools.attach=ALL-UNNAMED -J–add-modules=java.activation -J-XX:+IgnoreUnrecognizedVMOptions"
我们改动-Xms和-Xmx即可。
因为我们是分析hprof文件,打开软件后,直接装载文件即可
装载完毕后,点击错误线程,即可看见当时的信息了,便于分析
如果这里分析不出来,我们可以跳到第二个菜单栏 - 类
可以看到,byte占用的大小达到了95%
我们可以双击Byte[]进去,看具体是哪些字段占用了值
点击下三角,可以进行倒序排列,一般占用大的byte[]都会在下面,所以我们直接倒序排列,然后点击最后几个看即可。
这里我们点击加号,或者后面的值,都可以显示Byte数组里具体存的什么信息,帮助我们分析啦。