JVM总结
JVM部分主要是:
JVM基本组成部分、JVM垃圾回收机制、JVM内存优化
参考文章:https://segmentfault.com/a/1190000015605327 、https://zhuanlan.zhihu.com/p/25713880、https://zhuanlan.zhihu.com/p/25539690(GC部分)
1.new出来的对象都放在堆区里。
2.说下堆的结构,比如堆里分新生区,年老区和方法区,新生区里还分伊甸区和两个缓冲区,方法区主要存放的是Java类信息或在代码里通过import引入的类信息,垃圾回收流程主要涉及到的是新生和年老区。方法区有严格的条件要求。
3.垃圾回收的一般流程,比如什么时候会触发轻量级回收,什么时候会触发Full GC。
eden区空间不够存放新对象的时候,执行Minro GC。升到老年代的对象大于老年代剩余空间的时候执行Full GC,
4.引出下一个“内存调优”这个话题,比如可以说,“虽然说Java虚拟机能自动回收内存,但在平时写代码时,我们会遵循一些要点来提升内存性能,在项目里,我们还会监控内存使用量,而且我在项目里也有过排查OOM问题的经验“
通过记录内存溢出时候的堆信息来排查:
(1)可以查看服务器运行日志以及项目记录的日志,捕捉到内存溢出异常。查看一下/var/log/messages文件。messages 日志是核心系统日志文件。它包含了系统启动时的引导消息,以及系统运行时的其他状态消息.
(2)需要调整JVM的heap大小,在运行参数中设置
-Xms20m -Xmx20m
(3)在eclipse安装MAT工具
获到OOM异常的时候就会生成一个java.hprof文件,将输出的java.hprof文件导入MAT.
5.比如通过JConsole确认有内存问题,通过MAT文件Dump文件来查看OOM的现场,从而再通过GC日志和代码里输出的内存使用量来定位问题点
通过MAT等工具排查解决实际OOM的案例
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号