Java和C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人想出来。
给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。数据包括:运行日志、异常堆栈、GC日志、线程快照、堆转储快照等。
JDK的命令行工具
基于Windows平台下的JDK 1.6 Update 21.
1. jps(JVM Process Status Tool):虚拟机进程状况工具
列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID)。
2. jstat(JVM Statistics Monitoring Tool):虚拟机统计信息监视工具
用于监视虚拟机各种运行状态信息。可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
3. jinfo(Configuration Info for Java):Java配置信息工具
实时查看和调整虚拟机各项参数。
4. jmap(Memory Map for Java):Java内存映像工具
生成堆转储快照(一般称为heapdump或dump文件)。
jmap的作用不仅仅是为了获取dump文件,它还可以查询finalize执行队列、Java堆和永久代的详细信息,如空间使用率、当前使用哪种收集器等。
5. jhat(JVM Heap Analysis Tool):虚拟机堆转储快照分析工具
与jmap搭配使用,分析jmap生成的堆转储快照。但是一般不会直接使用jhat命令来分析dump文件,a. 分析工作耗时且消耗硬件资源;b. 分析功能简陋。
6. jstack(Stack Trace