背景:每次启动一个 JAVA程序,都会启动一个 JVM 虚拟机,体现在操作系统上就是一个进程,那在启动的需要设置 JVM虚拟机的内存大小以及相关参数。
问题:JVM 的大小设置不合理导致 GC 频繁,产生 STW导致挂起 JVM 运行中的线程,体现在线上就是瞬间出现请求卡顿现象。
方法区的大小在调优过程中不容易控制(程序中动态生成代码,动态编译加载),方法区满时引发 FullGC,所以 JDK1.8开始移出方法区,在 JVM 内存之外新建了元空间,降低类数据过大导导致的 GC 场景。
JVM 调优总结:parnew + cms
![](https://img.haomeiwen.com/i4202472/f5cba5d58e418744.png)
JVM 内存回收与分配:
![](https://img.haomeiwen.com/i4202472/873150e76a069f71.png)
GCROOT就是栈上和元数据区上的引用,如果堆中的对象没有每栈、元数据区引用,就认为是可回收的对象。
JMM 内存模型:如何在线程工作内存与主内存间同步数据
![](https://img.haomeiwen.com/i4202472/def40f47bdec2deb.png)
网友评论