1.java内存模型https://blog.youkuaiyun.com/bruce128/article/details/79357870
(1)程序计数器
(2)虚拟机栈
(3)本地方法栈
(4)堆(常量池)
(5)元数据(已被虚拟机加载的类信息)
(6)直接内存
前三个为线程私有,(5)(6)使用的是本地内存
2.jvm采用可达性分析算法决定一个对象是否回收,可作为GC roots的对象包括下面几种:
(1)虚拟机栈(栈帧中的本地变量表)中引用的对象
(2)方法区中类静态属性引用的对象
(3)方法区中常量引用的对象
(4)本地方法栈中JNI(即一般说的Nativefangfa)引用的对象
在可达性分析算法中不可达的对象,有一次执行finalize()拯救的机会,第二次就会被真的回收,finalize()只会被执行一次。
3.GC回收算法有标记-清除,标记-整理,复制算法,新生代使用复制,老年代使用标记整理,GC发生时需要stop the world,
G1收集器把堆分为多个大小相等的独立区域,优先回收价值大的Region。对象优先分配到Eden,不够了minor GC,空间分配担保也不够了,Full GC。