目录 3.2 对象已死吗 判断一个对象是否可被回收 引用类型 finalize() 回收方法区 3.3. 垃圾收集算法 1.Mark-Sweep(标记-清除)算法 2.Copying(复制)算法 3.Mark-Compact(标记-整理)算法 4.Generational Collection(分代收集)算法 3.5 垃圾收集器 1.Serial 2.ParNew 3.Parallel Scavenge 4.Serial Old 5.Parallel Old 6.CMS 7.G1 3.6 内存分…
GC需要完成: 哪些内存需要回收 什么时候回收 如何回收 如何确定对象不再使用 引用计数算法 给对象添加一个引用计数器,当有一个地方引用它时,计数器值进行加1操作:当引用失效时,计数器值进行减1操作:当计数器值为0,则说明对象不可能再被使用.但是它无法解决循环引用的问题. public class ReferenceCountingGC { public Object instance = null; public static void testGC(){ ReferenceCountingG…
目录 判断对象是否死亡 引用计数器算法 可达性分析算法 各种引用 回收方法区 垃圾收集算法 标记-清除算法 复制算法 标记-整理算法 分代收集算法 HotSpot算法实现 枚举根节点 GC停顿(Stop The World) 安全点 垃圾收集器 Serial 收集器 ParNew 收集器 Parallel Scanvenge 收集器 CMS 收集器 G1 收集器 新生代.老年代 和 永久代(元空间) 新生代 老年代 永久代(元空间) Minor GC.Major GC 和 Full GC 何时执…
一.根搜索算法: (1)定义:通过一系列名为"GC Roots"的对象作为起点,从这些起点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连的时候,则证明此对象不可用 (2)GC Roots对象包括这几种:虚拟机栈中引用的对象:方法区中的类静态属性引用的对象:方法区中常量的引用对象:本地方法中JNI的引用对象 二.垃圾收集算法 1.标记-清楚算法: (1)基本思想:首先标记出要回收的对象,在标记完后回收掉所有被标记的对象 (2)缺点:第一是标记和清楚…
第三章:垃圾收集器与内存分配 问题:1.哪些内存需要回收 2.什么时候回收 3.怎么回收 回收方法区:…
目前没有完美的收集器,不同的厂商.版本的虚拟机提供的垃圾收集器会有很大的差别,用户根据自己应用特点和要求组合出各个年代所使用 的收集器.基于jdk1.7Update14之后的虚拟机. HotSpot的垃圾收集器 上图是作用于新生代和老年代的收集器,连线代表可以搭配使用. 新生代采用复制算法,而老年代采用标记-整理.标记-清除算法 1.Serial:串行 采用复制算法的单线程收集器,进行GC的时候需要暂停其他线程的工作(被称为Stop The World),直到它收集结束.Serial依然是运行在…
3.1 关于垃圾收集和内存分配 垃圾收集和内存分配主要针对的区域是Java虚拟机中的堆和方法区: 3.2 如何判断对象是否“存活”(存活判定算法) 垃圾收集器在回收对象前判断其是否“存活”的两个算法: 1.引用计数算法:一个对象在被引用之后这个计数器就加1,不被引用之后则减1,如果是0,那么就被回收,这个一般不被主流Java虚拟机所使用,原因:对象的循环引用会导致计数器始终不为0,那么就无法回收. 2.可达性分析算法:通过GC roots对象作为起点,向下搜索和它进行有效链接的对象,如果对象最终…
垃圾收集器与内存分配策略 详解 3.1 概述 本文参考的是周志明的 <深入理解Java虚拟机>第三章 ,为了整理思路,简单记录一下,方便后期查阅. 3.2 对象已死吗 在垃圾收集器进行回收前,第一件事就是确定这些对象哪些还存活,哪些已经死去. 3.2.1 引用计数算法 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1:当引用失效时,计数器减1:其中计数器为0的对象是不可能再被使用的已死对象. 当两个对象相互引用时,这两个对象就不会被回收 引用计数算法,不被主流虚拟机采用,主要原…
第三章 垃圾收集器与内存分配策略 3.1 概述 哪些内存需要回收 何时回收 如何回收 程序计数器.虚拟机栈.本地方法栈3个区域随线程而生灭. java堆和方法区的内存需要回收.   3.2 对象已死吗   什么时候回收内存?   3.2.1 引用计数法 给对象中添加一个引用计数器,有地方引用时,计数器加1:当引用失效时,计数器减1.任何时刻计数器为0时的对象就是不可能再被使用的了. 存在问题:对象间的循环引用.  虚拟机不是通过这种方法判断对象是否存活.   3.2.2 可达性分析算法 通过一系…
1.  前言 这一版块内容比较多,分为两篇文章来做笔记.本文讲述上半部分垃圾收集部分;下一篇文章写内存分配部分. 概述 对象已死吗? 引用技术算法 可达性分析算法 再谈引用 两次标记 回收方法区 2.    垃圾收集器与内存分配策略 2.1  概述 对于垃圾回收机制(Garbage Collection,GC),需要思考以下三个问题: 哪些内存需要回收? 什么时候回收? 如何回收? 2.2  对象已死吗? 堆里面存放着Java中几乎所有的对象实例,垃圾收集器在对堆进行回收前,首先要做的当然是判断…