参考
jvm内存分解: http://liangpzhmz.blog.163.com/blog/static/101716295200961321333915/
http://blog.csdn.net/fenglibing/article/details/6298326
http://blog.csdn.net/fenglibing/article/details/6411953
http://apps.hi.baidu.com/share/detail/23550625
jdk的工具用途介绍:
http://blog.csdn.net/kelly859/article/details/5827365
jps查看JAVA进程
jmap查看内存中对象及占用空间,比较那些对象被回收,可以结合MAT工具 http://download.eclipse.org/mat/1.1/update-site/
jstat查看内存具体情况,分析内存
jconsole GUI工具 http://af1200.blog.163.com/blog/static/17132274201051013550361/
http://blog.sina.com.cn/s/blog_5dc29fcc0100xiex.html
MAT报告分析说明: http://tech.ddvip.com/2010-07/1279867858157995.html
http://rednaxelafx.iteye.com/blog/1048958
shallow heap和retained heap解析 : http://hi.baidu.com/qmiao128/blog/item/bf9d66a4b3e313eb9152eed1.html
获取JAVA内存泄漏信息存储自动存储成文件的方法 http://jiangnanguying.iteye.com/blog/539697
两种手段获得内存泄漏时的内存中对象快照,一种是用 jmap直接获取,另一种是修改JVM参数,增加
-XX:-HeapDumpOnOutOfMemoryError 然后就可以在JVM的工作目录(classLoader的目录)找到文件
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid6280.hprof ...
Heap dump file created [ 50549348 bytes in 1.444 secs]
内存使用过高,可以用JDK参数和JMAP结合MAT或者JHAP查看内存中到底放了什么对象.
CPU使用高,可以使用jstack检查那个线程问题和死锁。
可以通过jconsole的mbean设置监控内存和死锁,线程等在一段时间内的情况,当然jprofile更好,
每次GC后,内存减少,则可能存在内存泄露问题
GC回收机制:
http://jeromecen1021.blog.163.com/blog/static/18851527120117274624888/