JVM总结
一:JVM运行时数据区:程序计数器、虚拟机栈、本地方法栈、堆、方法区(元空间)
1:虚拟机栈:存储当前线程运行方法所需的数据、指令、返回地址。
栈帧(用来执行方法):每个方法在执行的同时都会创建一个栈帧,栈帧划分为:局部变量表(八大基本数据类型、对象引用reference)、操作数栈、动态链接、返回地址。
2:本地方法栈:本地方法栈保存的是native方法的信息,当一个JVM创建的线程调用native方法后,JVM不在为其在虚拟机栈中创建栈帧,JVM只是简单地动态链接并直接调用native方法。但是Hotspot虚拟机把虚拟机栈和本地方法栈合二为一。
二:堆内存分为新生代和老年代,新生代分为:Eden区域、survivor区域(from、to),也就是说新生代区域分为三部门,内存大小比例为8:1:1
三:对象存放过程总结:
①:对象优先放在Eden区域
②:长期存活的对象放在老年代,age=15(发生一次gc,age加一),Eden->from/to->old
③:大对象直接进入老年代
④:动态年龄判断
⑤:空间分配担保,保守做法,对象要晋级老年代了,一般不发生老年代gc,但是如果放不下了,会发生gc
四:JVM中的垃圾回收机制
1:Minor GC:
回收区域:新生代
回收算法:复制回收算法
2:Full GC:
回收区域:新生代、老年代、永久代(元空间)
回收算法:标记清除、标记整理算法
五:JVM中存在的引用类型
1:强引用
2:软引用
3:弱引用
4:虚引用
郭慕荣博客园