虚拟机-- 垃圾收集 对象 区域 时机
垃圾收集器与内存分配策略 一、 GC要做的事情 哪些内存需要回收 ? 什么时候回收 ? 如何回收 ? 二、 什么时候需要GC ? 内存溢出、内存泄漏等; 垃圾收集收成系统达到更高并发量的瓶颈时。 三、 正文 1 哪些内存需要回收 ? 基本不考虑 部分: 程序计数器、虚拟机栈、本地方法栈 原因: 在编译期基本确定了内存大小 主要考虑 部分: Java堆和方法区 原因: 运行期间动态分配内存。 2 什么时候回收 ? 答: 对象已死的时候 #### 问题来了,如何判断对象已死 ? 引用计数算法 定义: 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值加1;当引用失效时,计数器值就减1; 任何时刻计数器为0的对象就是不可能再被使用的。 好处: 实现简单,效率高 缺陷: 很难解决对象之间互相循环引用的问题 可达性分析算法 定义: 通过一系列的称为 GC Roots 的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用连, 当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。 java中,GC Roots对象 虚拟机栈(栈帧中的本地变量表...