资料来源:
http://blog.csdn.net/moneyice/article/details/2644503
http://tivan.iteye.com/blog/1487855
http://www.blogjava.net/rosen/archive/2010/05/21/321575.html
为什么用MAT
Mat是一款离线分析数据的工具。对于实时内存分析工具来说,其本身就消耗内存,如果分析工具和被分析的程序同时运行可能导致系统崩溃。所以采用离线数据分析工具,有时很有必要。
Heap Dump
?heap dump是特定时间点,java进程的内存快照。有不同的格式来存储这些数据,总的来说包含了快照被触发时java对象和类在heap中的情况。由于快照只是一瞬间的事情,所以heap dump中无法包含一个对象在何时、何地(哪个方法中)被分配这样的信息。
?
在不同平台和不同java版本有不同的方式获取heap dump,而MAT需要的是HPROF格式的heap dump二进制文件。想无需人工干预的话,要这样配置JVM参数:-XX:-HeapDumpOnOutOfMemoryError,当错误发生时,会自动生成heap dump,在生产环境中,只有用这种方式。如果你想自己控制什么时候生成heap dump,在Windows+JDK6环境中可利用JConsole工具,而在Linux或者Mac OS X环境下均可使用JDK5、6自带的jmap工具。当然,还可以配置JVM参数:-XX:+HeapDumpOnCtrlBreak,也就是在控制台使用Ctrl+Break键来生成heap dump。由于我是windows+JDK5,所以选择了-XX:-HeapDumpOnOutOfMemoryError这种方式,更多配置请参考MAT Wiki。
?