1、jvm内存模型:
堆(对象,数组)、虚拟机栈(局部变量,出口)、本地方法栈、方法区(类信息,常量,静态变量)、程序计数器(指令)、直接内存、常量池
对象内存布局:
对象头(一部分存储对象自身运行时数据,一部分存储指针类型找到是哪个类的实例)、实例数据、对其填充
对象的定位访问(栈访问堆对象)
reference一种方式是访问堆中的句柄,通过句柄找到对应的对象实例数据,这种方式适合增删多的
reference一种方式是直接访问堆的具体对象,这种适合经常查询,但很少改变的对象
判断对象是否被引用
1、引用计数法(暂没使用),两个对象相互引用不好计数
2、可达分析法,从gc root出发,创建引用链。对象没有在引用链上的判定为死亡
引用类型:
强引用(new出来的对象,创建就不会回收)。弱引用。软引用。虚引用
在新生代中70%-90%的对象都回收
垃圾回收算法
1、标记清除算法,会产生碎片
2、复制算法。复制有引用的对象,再全部回收
3、标记整理算法,标记清除算法的升级版、先标记再回收、再整理碎片
4、分代回收:新生代使用复制算法(因为只有少量对象存活),老年代使用标记整理算法
类加载机制
加载-校验-准备-解析-初始化-使用-卸载
参考文章:https://blog.csdn.net/qq_41701956/article/details/81664921