史上最全GC原理
史上最全GC原理 什么是垃圾 定义 释放已占用的内存,防止内存泄露 清除已经死亡或者长时间未使用的对象内存 语言特性 c++手动回收垃圾 忘记回收 回收多次 java 自动回收 如何定位垃圾 引用计数法 对象头中分配一片空间用于存储对象引用次数 程序执行过程中完成,非STW 注意:Recycler 算法可解决循环引用,但在多线程环境下,引用计数变更也要进行昂贵的同步操作,性能较低,早期的编程语言会采用此算法 根可达性分析算法 GC Root 虚拟机栈中引用的对象 public static void testGC(){ StackLocalParameter s = new StackLocalParameter(“localParameter”); s = null; } 方法区中类静态属性引用的变量 方法区中常量引用的对象 本地方法栈JNI中引用的对象 任何 native 接口都会使用某种本地方法栈,实现的本地方法接口是使用 C 连接模型的话,那么它的本地方法栈就是 C 栈。当线程调用 Java 方法时,虚拟机会创建一个新的栈帧并压入 Java 栈。然而当它调用的是本地方法时,虚拟机会保持 Java 栈不变,不再在线程的 Java 栈中压入新的帧,虚拟机只是简单地动态连接并直接调用指定的本地方法。 通过GC roots对象作为起点开始向下搜索引用的对象