死锁的产生和诊断
一个线程需要同时获取多把锁时,就容易发生死锁
eg:
new Thread(()->{synchronized(A){};synchronized(B){};
})
new Thread(()->{synchronized(B){};synchronized(A){};
})
线程持有资源并互相等待对方持有的资源
JDK自带工具
jps:输出jvm中运行的进程状态信息
jstack:查看java进程内线程的堆栈信息
jstack -l 线程号:查看对应线程的运行情况
可视化工具
jconsole:对jvm的内存,线程,类进行监控,一个基于jmx的GUI性能监控工具
直接从bin目录下找到jconsole启动即可
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架
VisualVm:故障处理工具,监控线程,内存情况,查看方法的cpu时间和内存中的对象,已被GC的对象,反向查看分配的堆栈
直接从bin目录下找到jvisualvm.exe启动即可