background image

J2SE 5.0

引入的

java.util.concurrent.locks

为锁定和等待条件提供了一个框架。死

锁可能涉及对象监视器和

java.util.concurrent

锁。

一般情况下,死锁会导致这种应用程序或它的一部分变得无响应。例如,如果负责图形用

 

户界面 (GUI)

 

更新的进程被锁死, GUI 应用程序则会冻结,并且不响应任何用户动作。

循环线程
循环线程也可能造成应用程序挂起。当一个或多个线程在一个死循环中执行时,这个循环
也许会消耗所有可利用的 CPU 周期并造成这种应用程序的其余部分无响应。
严重的锁争用
同步在多线程应用程序中大量使用,这是为了保证对一种共享资源的独占访问或为了在
多个线程间协调和完成任务。例如,应用程序在数据结构上使用一台对象监视器同步更新。
当两个线程试图同时更新数据结构时,只有一个线程能获取对象监视器和继续更新数据
结构。同时,另一个线程被阻拦,等待进入

synchronized

块,直到第一个线程完成它的

更新并释放对象监视器。同步争用情况会影响应用程序的性能和可扩展性。
Java SE 6 平台的监视和管理能力

Java SE 6 中的监视和管理支持包括编程接口以及几个有用的诊断工具,用以检查各种

 

各样的虚拟机 (VM)资源。关于编程接口的信息,请阅读

API 规范

JConsole 是允许您监测各种各样的 VM 资源运行时使用情况的 Java 监视和管理控制台。
它使您注意到前面部分描述的应用程序执行过程中出现的症状。您可以使用 JConsole 连
接到在同一机器上本地运行的应用程序或在不同机器上远程运行的应用程序,监测以下
信息:



 

内存使用和垃圾回收活动



 

线程状态、线程堆栈检索和锁



 

等待最终完成的对象数目

运行时信息,例如正常运行时间和进程消耗的

CPU

 

时间



VM 信息,例如 JVM

 

的输入参数和应用程序类路径

 

另外, Java SE 6 还包括其他命令行实用工具

jstat

令打印各种各样的 VM 统计数据,

 

包括内存使用、垃圾回收时间、类加载和及时编译器统计

jmap

 命令允许您获得运行时的

堆直方图和堆转储

jhat

令允许您分析堆转储

jstack

令允许您获得线程堆栈跟踪。这

些诊断工具可以附加到任何应用程序,不需要以特别方式启动。
用 JDK 工具诊断

这个部分描述如何使用 JDK 工具诊断共同的 Java SE 问题。JDK 工具使您得到关于应用程
序的更多诊断信息和帮助,以便确定应用程序是否按预想的正常运行。在某些情况下,诊
断信息可能很充足,能够帮助您诊断问题和辨认它的起因。其他情况下,您可能需要使用
分析工具或调试器来调试问题。
关于每个工具的详情。