一个类在jvm中运行的过程

1、特性

jvm帮助java语言可以实现跨平台

2、jvm结构图

(线程)栈:包含局部变量表、数字操作栈、动态链接、方法出口
(对象)堆:堆中存储对象
本地方法栈:java语言调用一些本地的C++代码
方法区(原空间):加载一些常量、静态变量、类信息
程序计数器:字节码文件中执行到某一句指令所对应的行号(并发执行过程相互切换后,继续执行的依据)
在这里插入图片描述

3、堆中的对象及其gc

在这里插入图片描述

堆中分区:年起代、老年代
年轻代:Eden区、Survivor区(s0、s1)
Eden区:所有新进来的对象先在这里,若满了就会进行major gc,回收无用的对象,然后将剩下的放入s0区,若第二次Eden满了,继续进行major gc,判断Eden与Survivor中非空的对象是否可以回收,然后将两部分不能回收的放入s1区
Survivor区:若对象头中的次数达到15(一般为15),就会放入老年区,说白了就是经过15次major gc后依然存在的对象移入老年区
老年代:当major jc 达到15次,这个对象还在时,就将其加入老年区

major gc:当我们堆中Eden满的时候,进行major gc,将其中的对象找寻其根节点(没有引用其他对象的对象),看是否回收,若满足回收条件,就释放
full gc:当老年区满了,就会进行full gc ,看是否可以回收
stop the word:full gc过程中,进入这个状态

猜你喜欢

转载自blog.csdn.net/ABidMan/article/details/128174961