垃圾收集器与内存分配策略

jvm垃圾收集器与内存分配策略

佐手、 提交于 2020-02-29 17:16:36
垃圾收集器与内存分配策略: 以下参考周志明的<<深入理解jvm高级特性与最佳实践>>。 判断对象是否存活: 引用计数 :通过判断对象被引用的次数(为0,则表示不可被使用),但这很难解决 对象相互循环引用 的问题。 根搜索算法 :即采用 有向图 的方式,判断从 GC Roots 到某个对象 是否可达 。 上图中obj1,obj2,obj3,obj4可达,obj5,obj6不可达(可被GC回收)。 可作为GC Roots的对象: 1. 虚拟机栈中 局部变量 引用的对象。 2. 类静态属性 引用的对象。 3. 常量 引用的对象。 4. JNI 中引用的对象。 java中的引用类型: java中有四种引用类型(由强到弱): 强引用(StrongReference) : 只要对象有被强引用,对象就 不会被GC回收 ,如Object o = new Object()中的o就是强引用。 软引用(SoftReference) : 软引用的对象为不必须回收的对象,但在 内存不足发生溢出之前 ,GC会在回收时,将软引用的对象视作可可回收的对象,所以SoftReference可以用来做一些 高速缓存 。 弱引用(WeakReference) :软引用的对象只能 存活到下一次GC的时候 ,无论内存是否足够,如 WeakHashMap 类。 虚引用(PhantomReference) :