JVM虚拟机
类装载子系统装载.class文件,加载到运行时数据区,通过字节码执行引擎一步步修改程序计数器,执行程序,在方法区中找到类信息进行执行
线程私有:栈,本地方法区,程序计数器
非线程私有:堆,方法区(元空间)
栈:
栈帧:(每个方法对应一个栈帧)先进后出FILO
- 局部变量表:存储方法中的局部变量 ,若局部变量为一个实例对象,则其地址指向堆中
- 操作数栈:存放程序执行时进行操作的数据的临时空间。
- 动态链接:方法代码是放到方法区的,当你需要调用时,需要入口地址,动态链接就是这个方法的入口地址
- 方法出口:当调用该方法时一开始时,就会将该方法的下一行(出口)保存到方法的方法出口中
本地方法栈
本地方法的标志native关键字,java语言调用C语言就是通过本地方法去调用的。
本地方法栈就是存放调用,执行本地方法时存储的相关信息的一小部分内存
方法区
:主要放常量,静态变量,类信息。类信息由字节码执行引擎执行,若静态变量为对象类型,那么其地址必指向堆
堆
存放new出的对象,
若eden区的对象满了,则触发minor gc,gc root找到那些没被引用的对象清除,eden中留下剩下的对象进入survivor1区,如果survivor2区也有对象,则也移入s1区,以此循环,移入s2区,每移动一次,年龄加1,直到年龄为15移入老年代 ,老年代满了后进行full gc,老年代放不下了就会outofMemory(OOM)内存溢出