java 堆栈信息分析_Java堆栈信息分析

java 堆栈信息分析_Java堆栈信息分析以下数据使用 Jconsole 转储文件中得来 不同的工具 不同的虚拟机得到的具体信息可能有差别栈转储信息转储方式通过 Jconsole 工具 或者其他分析工具 SignalDispat 4daemonprio 9os prio 2tid 0x142b7400ni 0x280runnabl 0x00000000 java lang Thread State RUNNA

以下数据使用Jconsole转储文件中得来,不同的工具,不同的虚拟机得到的具体信息可能有差别

栈转储信息

转储方式

通过Jconsole工具(或者其他分析工具)

0818b9ca8b590ca3270a3433284dd417.png

“Signal Dispatcher” #4 daemon prio=9 os_prio=2 tid=0x142b7400 nid=0x280 runnable [0x00000000]

java.lang.Thread.State: RUNNABLE

Locked ownable synchronizers:

– None

“Finalizer” #3 daemon prio=8 os_prio=1 tid=0x nid=0x9e0 in Object.wait() [0x1458f000]

java.lang.Thread.State: WAITING (on object monitor)

at java.lang.Object.wait(Native Method)

– waiting on <0x094678d8> (a java.lang.ref.ReferenceQueue$Lock)

at java.lang.ref.ReferenceQueue.remove(Unknown Source)

– locked <0x094678d8> (a java.lang.ref.ReferenceQueue$Lock)

at java.lang.ref.ReferenceQueue.remove(Unknown Source)

at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)

Locked ownable synchronizers:

– None

“Reference Handler” #2 daemon prio=10 os_prio=2 tid=0x14270c00 nid=0xcc8 in Object.wait() [0x03daf000]

java.lang.Thread.State: WAITING (on object monitor)

at java.lang.Object.wait(Native Method)

– waiting on <0x09467a78> (a java.lang.ref.Reference$Lock)

at java.lang.Object.wait(Unknown Source)

at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)

– locked <0x09467a78> (a java.lang.ref.Reference$Lock)

Locked ownable synchronizers:

– None

“main” #1 prio=5 os_prio=0 tid=0x01b0c000 nid=0x9a8 waiting on condition [0x01b5f000]

java.lang.Thread.State: TIMED_WAITING (sleeping)

at java.lang.Thread.sleep(Native Method)

at Test.main(Redefined)

Locked ownable synchronizers:

– None

Java虚拟机在运行时,除了用户线程外,还有许多的守护线程、虚拟机自身线程。

对于每个线程,都有如下信息:

线程名,如“main”

线程属性(如果是Daemon线程,会有Daemon标识,否则,什么都没有)

线程优先级,prio

java线程对应的本地线程的优先级os_pri

java线程标识tid

java线程对应的本地线程标识nid

线程状态(运行中、等待等)

线程的栈信息

线程锁信息

堆转储信息

0818b9ca8b590ca3270a3433284dd417.png

直接使用sum jdk自带的工具jconsole,jvisual参看堆转储文件能看到的有用信息比较少,最多能看到那种类型的数据占用内存最多。

一般是使用它们生成转储文件,然后导入到其他工具中进行进一步分析,如eclipse memory map Analyzer (mat)进行分析。

安装mat后,使用mat打开生成的堆转储文件,查看相关信息。

(1)个人觉得如果要分析内存问题,还是需要非常了解你所分析的程序,不然,这些数据并没有什么太多用处。

(2)目前对mat还不是非常熟悉,感觉功能很强大,功能非常多,还没有摸索清楚大部分的功能用法,所以,下面就简单说一说大概弄懂了的东西

个人觉得最有用的几个分析功能有:

1.大体查看那些对象占用的内存最多 这个可以通过overview直接可以看到

2.查看某个对象一个简单的状态,如集合的最近刷新的值

3.查看对象到GC root的路径(即如何被引用的,为什么没有被回收)4.性能优化方法内存中是否有大量的重复字符串

集合的填充比例(看是否集合占用的许多未使用的空间)

5.线程栈信息快照,如当前都有那些变量,占用了多少空间

这个先说到这,等GC调优更加熟练了之后在写吧!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227086.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午9:58
下一篇 2026年3月16日 下午9:59


相关推荐

  • chrome webdriver下载_webdriver.chrome()

    chrome webdriver下载_webdriver.chrome()请对应自己的谷歌浏览器的版本下载chrome的webdriver:点击下载windows环境变量配置1、webdriver文件位置可以自定义位置,如:d:\selenium环境变量,的文件夹下也可以放在C:\ProgramFiles(x86)\Google\Chrome\Application的文件夹下2、系统环境变量PATH按照图的指示,1->2->3->…

    2026年1月25日
    6
  • 退出卸载360、QAX 天擎,无需密码

    退出卸载360、QAX 天擎,无需密码退出卸载360、QAX天擎,无需密码天擎企业版,退出和卸载是需要管理员密码进入360天擎,点击设置=>防护中心=>自我保护功能,去掉勾选,确认\360Safe\EntClient\conf\EntBase.dat目录目录查找:在桌面右下角找到天擎应用程序右键,进入程序安装位置,即可进入安装目录EntBase.dat文件删除uipassqtpass两行=后面的两个字符串即可关闭退出卸载密码。这里如果没有权限无法修改,先将EntBase.dat复制到其他文件夹(

    2026年3月6日
    5
  • 0X80000000(8007000b)

    给int类型赋值的话,0X7FFFFFFF代表最大值,0X80000000代表最小值@NativepublicstaticfinalintMIN_VALUE=0x80000000;@NativepublicstaticfinalintMAX_VALUE=0x7fffffff;publicclasstest1{ publicstaticvoid…

    2022年4月15日
    66
  • MyBatis常用对象SqlSessionFactory和SqlSession介绍和运用

    MyBatis常用对象SqlSessionFactory和SqlSession介绍和运用前言:学习框架一个比较好的路径阅读源码.本文介绍的SqlSessionFactory和SqlSession.可以通过了解SqlSessionFactory接口和SqlSession接口以及两个的实现类入手,去看源码了解实现过程.最好能把项目下载到本地,慢慢分析实现过程.Myabtis官网:http://www.mybatis.org/github地址:https://github.com/myb

    2022年4月28日
    65
  • 扣子空间如何创建智能体

    扣子空间如何创建智能体

    2026年3月12日
    4
  • raid卡电池

    raid卡电池raid 卡上的电池只是给卡上的 RAM 供电 RAM 是 raid 卡上的一块芯片 新一代产品 会将 RAM 里的数据写到 flash 里保存 PCI E 给 riad 卡供电 卡上的电池也通过 PCI E 的电源充电 电池再给 RAM 供电 raid 卡是通过 PCI E 接口插在主板上的 PCI E 接口可以供电 一般电池如果出了问题或者没电 raid 控制器会关闭写缓存性能变差 如果没有关闭写缓存 那么当断电情况下 缓

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号