查看java线程状态 JVM的线程状态及如何排查死锁原因?
JVM的线程状态及如何排查死锁原因?
通常,我们可以通过查看死锁时的内存占用情况来找出原因。具体方法是:通过jmap或jstat命令导出当前转储日志,然后分析日志中的线程执行情况和内存占用情况。常用命令如下://print out The memory usage jstat-gcutil 12564 1000 5//print out The memory usage jmap-heap 12564//print out The resource usage in The JVM。找到jmap-histo 12564 |。/更合适的细节-历史:现场12564>/主页/xxx/jvmdump.txt文件//打印出整个转储信息(不推荐,太复杂)jmap-转储:格式=b,文件=/home/xxx/jvmalldump.txt文件12564//打印出每个内存分区的使用情况jstat-gccapacity 12564。有关更多详细信息,请参阅本文blog.yemou.net/article/query/info/tytfjhfascvhzxcyt121
JVM线程状态都有哪几种?
[1]新状态:创建线程实例时,即使用New关键字和thread类或其子类创建线程对象。此时,线程处于新状态。处于新状态的线程有自己的内存空间,但线程没有运行。此时,线程不活动。
[2]可运行:通过调用线程实例的start()方法启动线程,使线程进入可运行状态。处于就绪状态的线程已经有了运行条件,但是它还没有分配给CPU,也就是说,它不会立即执行。此时,它处于线程就绪队列中,等待系统将CPCU分配给它,等待状态不是线程处于活动状态的执行状态。
[3]运行状态:一旦获得CPU(由JVM选择),线程将进入运行状态,线程的run()方法将被执行。处于运行状态的线程将在自己的run()方法中执行该操作,直到它调用其他方法,或等待某些资源阻塞,或完成任务并死亡。如果在给定的时间段内运行失败,处于运行状态的线程将在自己的run()方法中执行该操作,当执行结束时,它将被系统替换并返回到线程的等待状态;此时,线程处于活动状态。
[4]阻塞:线程通过调用join()、sleep()、wait()被阻塞,或者资源被临时使用;处于阻塞状态的线程仍然处于活动状态。
[5]死状态:当线程的run()方法异常完成、中断或退出时,线程将进入死状态。此时,可能仍然存在线程的实例对象。当该线程不再被视为独立线程时,该线程的独立调用堆栈已被解析。一旦线程进入死状态,它就不能再进入独立线程的生命周期。对于处于死状态的线程调用start()方法,将出现运行时异常;处于死状态的线程不是活动的。
查看java线程状态 线程池的实现原理 springbean的生命周期
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。