重新认识Java--JVM

JVM:

主要包括:类加载子系统,运行时数据区和字节码执行引擎。


其中运行时数据区又包含:堆,栈,本地方法栈和程序计数器。其中堆存放 new出来的对象和数组,栈存在局部变量和方法。一个线程执行的时候会分配栈,栈里面会有该线程栈帧,这个栈帧就是当前线程方法的一些局部变量,当该方法调用了另外的其他方法,栈就会给这个其他方法的分配栈帧内存区域,以存放该方法的局部变量。

用图来看内存模型:

在这里插入图片描述

gc机制:

当线程一直执行,对象先放Eden区,Eden区满了之后,触发manor gc,用可达性算法去找到非回收的对象,可达性算法是从gc Roots根节点开始的。用复制算法复制到survivor区(s0),分代年龄加1,线程继续执行,再次触发gc,gcEden和s0,将还不需要回收的对象放到s1分代年龄再加1,当分代年龄到了15之后还没被回收,会被放到老年代。当老年代被放满的时候,会执行full gc,full gc会STW(stop the word),停止用户线程的执行,造成用户感觉到卡顿的现象。jvm调优就是为了减少STW,减少full gc。
gc Roots根节点:线程站的本地变量、静态变量、本地方法栈的变量。

Guess you like

Origin blog.csdn.net/qq_39164603/article/details/115026225