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的案例

 

posted @ 2019-02-26 18:06  StingLon  阅读(114)  评论(0)    收藏  举报