第三章 垃圾收集器与内存分配策略
3.1 概述
  1. 哪些内存需要回收
  2. 何时回收
  3. 如何回收
程序计数器、虚拟机栈、本地方法栈3个区域随线程而生灭。 java堆和方法区的内存需要回收。
 
3.2 对象已死吗
  什么时候回收内存?
 
3.2.1 引用计数法
给对象中添加一个引用计数器,有地方引用时,计数器加1;当引用失效时,计数器减1。任何时刻计数器为0时的对象就是不可能再被使用的了。
存在问题:对象间的循环引用。  虚拟机不是通过这种方法判断对象是否存活。
 
3.2.2 可达性分析算法
通过一系列"GC Roots"对象作为起始点,从这些节点向下搜索,走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连(用图论的话来说,从GC Roots到这个对象不可达),证明此对象不可用。
java中可以作为GC Roots的对象包含:
  1. 虚拟机栈(栈帧中的本地变量表)引用的对象
  2. 方法区中类静态属性引用的对象
  3. 方法区中常量引用的对象
  4. 本地方法栈中JNI(即一般说的native方法)引用的对象
3.2.3 再谈引用
JDK 1.2之后,引用扩充为
强引用:程序代码中普遍存在的,类似“Object obj = new Object()”这类的引用。只要强引用还在,垃圾收集器永远不会回收掉被引用的对象。
软引用:还有用但非必需的对象。对于软引用关联着的对象,在系统将要发生内存溢出之前,将会把这些对象列进回收范围之中进行第二次回收。
弱引用: 只能存活到下一次垃圾收集发生之前。
虚引用:唯一目的就是能在这个对象被收集器回收时收到一个系统通知。
 
3.2.4 生存还是死亡
宣告一个对象的死亡,至少要经历两次标记过程:如果对象与GC Roots没有引用链,它会被第一次标记并进行筛选,筛选的条件是此对象是否有必要执行finalize()方法。如果对象没有覆盖finalize()方法或者虚拟机已经执行过finalize()方法,虚拟机将都视为“没有必要执行”。如果对象在被判断有必要执行finalize()方法,则会被加入一个F-Queue的对队列中,稍后由一个由虚拟机创建的、低优先级的Finalizer线程去执行队列中的对象的finalize()方法。 对象可以在finalize()中拯救自己,关联一个对象。否则就真被清除了。注意:一个对象的finalize()方法只能被系统自动调用一次。尽量避免使用finalize()方法。
 
3.2.5 回收方法区
永久代的垃圾回收主要有两部分:废弃常量和无用的类。
无用的类要满足以下条件,就“可以“回收
  1. 该类所有的实例都已经回收,也就是java堆中不存在该类的实例。
  2. 加载该类的ClassLoader已经被回收
  3. 该类对应的java.lang.Class对象没有在任何地方被引用,无法再任何地方通过反射访问该类的方法。
 
 
3.3 垃圾收集算法 
aaarticlea/jpeg;base64,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" alt="" /> aaarticlea/jpeg;base64,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" alt="" />
. 新生代(Young Generation):也有叫做年轻代的,这里使用《深入理解JAVA虚拟机》中的叫法,下同。
其实看名称就能看出一些,一般情况下,新创建的对象都会存放到新生代中(大对象除外)。
新生代中对象的特点是:很快就会被GC回收掉的或者不是特别大的对象。
为了方便垃圾收集,新生代又分出了一个Eden区,两个 Survivor区。
JVM 每次只会使用 Eden区 和其中的一块 Survivor 区域来为对象服务,另一块Survivor区域是空的,用于垃圾回收。
举个例子,第一次回收的时候,虚拟机会将 Eden区+Survivor(from)区域的存活对象复制到Survivor(to)上(存活对象小于Survivor(to)的空间),清空Survivor(from),虚拟机使用Eden区+Survivor(to);
第二次回收的时候,虚拟机再将Eden区+Survivor(to)存活的对象复制到Survivor(from)。
这三个区域默认情况下是按照8::1分配,也可以手动配置。
. 老年代(Old Generation):在新生代每进行一次垃圾收集后,就会给存活的对象“加1岁”,当年龄达到一定数量的时候就会进入老年代(默认是15,可以通过-XX:MaxTenuringThreshold来设置)。
另外,比较大的对象也会进入老年代,可以-XX:PretenureSizeThreshold进行设置。
如-XX:PretenureSizeThreshold3M,那么大于3M的对象就会直接就进入老年代。
因此,老年代中存放的都是一些生命周期较长的对象或者特别大的对象。
. 永久代(Permanent Generation ):即JVM的方法区。在这里存放着一些被虚拟机加载的类信息(别忘了还有动态生成的类)的静态文件,这就导致了这个区中的东西比老年代和新生代更不容易回收。
永久代大小通过-XX:MaxPermSize=<N>进行设置。
. 元空间(Metaspace):从JDK 8开始,Java开始使用元空间取代永久代,元空间并不在虚拟机中,而是直接使用本地内存。
那么,默认情况下,元空间的大小仅受本地内存限制。当然,也可以对元空间的大小手动的配置。
 
3.3.1 标记-清除算法
首先标记所有需要回收的对象,在标记统一完成后回收所有标记的对象。 不足:1 标记和回收的效率都不高 2标记清除后会产生大量不连续的内存碎片,碎片太多可能会导致以后再重新运行时需要分配较大对象后,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。
 
3.3.2 复制算法
它将可用的内存按容量分为大小相等的两块,每次只使用其中的一块。当这块内存用完时,就将还存活的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。
一块较大的Eden 和两块较小的Survivir。分配担保。
 
3.3.3标记-整理算法
同标记清除算法,但是在清除时让所有存活的对象都向一端移动,然后清理掉边界以外的内存。
 
3.3.4分代收集算法
根据对象存活周期不同将内存划分为几块,一般是把java堆分为新生代和老年代。在新生代中,每次垃圾收集时都发生大批对象死去,就选用复制算法。在老年代中因为对象存活率高、没有额外空间对它进行分配担保,就必须使用标记-清理 或标记-整理算法。
 
3.4 HotSpot的算法实现
3.4.1 枚举根节点
GC进行时必须停顿所有java执行线程,这件事被称为“Stop the World”。
3.4.2安全点
程序执行时,只有在安全点才能暂停开始GC。以及如何让线程都跑到安全点再停顿。分为抢占式中断和主动式中断。
1.抢占式。现在基本没有使用抢占式。 所有线程停止,如果没到安全点则继续执行到安全点。
2.主动式。设置一个标记,各个线程执行时主动轮询这个标记,发现中断标记为真时就自己中断挂起,轮询标记的地方和安全点是重合的。
3.4.3 安全区域
安全点的扩充。安全区域是指一段代码中,引用关系不会发生改变,区域中任何一点开始GC都是安全的。
 
3.5 垃圾收集器 举例+ CG日志分析
 
3.6 内存分配与回收机制
对象的内存分配,往大了说就是在堆上分配,对象主要分配在新生区Eden区上,如果启动了本地线程分配缓存,将按线程优先在TLAB上分配。少数情况下可能会直接分配到老年代中。
 
3.6.1对象优先在Eden分配
大多数情况下,对象在Eden区中分配,当Eden区中没有足够空间进行分配时,虚拟机会发生一次Minor GC.
新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也较快。
老年代GC(Major GC/Full GC):指发生在老年代的GC,出现Major GC,经常会伴随最少一次的minor gc。一般比前者速度慢10倍以上
 
3.6.2 大对象直接进入老年代
所谓大对象是指,需要大量连续内存空间的java对象,最典型大对象就是很长的字符串以及数组。目的:避免大量复制回收内存。有些回收器可以设置大对象最大内存上限标准。
 
3.6.3长期存活的对象将进入老年代
每一个对象定义了一个对象年龄计数器,对象在Eden区域出生并且经历一次minor GC存活,且能被survivor 容纳,则年龄为1,以后每熬过一次minor GC,年龄加一,超过一定值(默认15)会被移至老年代。
 
3.6.4 动态对象年龄判断
如果在survivor空间中相同年龄所有对象大小的总和大于survivor空间的一半,年龄大于等于该年龄的对象就可以直接进入老年代,无需等待MaxTenuringThreshold中的要求。
 
3.6.5分配担保
如果分配担保失败,进行一次Full GC。

《深入理解java虚拟机》第三章 垃圾收集器与内存分配策略的更多相关文章

  1. [Note][深入理解Java虚拟机] 第三章 垃圾收集器与内存分配策略笔记

    书上关于GCTimeRatio的讲解有点难以理解,查看Oracle的文档后重新理解了下 -XX:GCTimeRatio 运行时间 / GC时间 当GCTimeRatio为19时,运行时间是GC时间的1 ...

  2. <<深入Java虚拟机>>-第三章-垃圾收集器与内存分配策略-学习笔记

    垃圾收集 垃圾收集(Garbage Collection,GC),垃圾收集需要完成的三件事情. 哪些对象需要回收 什么时候回收 如何回收 如何确定对象已死(即不可能在被任何途径引用的对象) 引用计数算 ...

  3. [深入理解JVM虚拟机]第3章-垃圾收集器、内存分配策略

    垃圾收集器 判断对象是否需存活 回收堆 判断对象是否存活: 方法一:引用计数法.对象被引用一次就+1,当为0时回收对象.缺点:无法解决循环引用问题. 方法二:可达性分析算法.记录当前对象是否有和GC ...

  4. 深入理解java虚拟机(2)------垃圾收集器和内存分配策略

    GC可谓是java相较于C++语言,最大的不同点之一. 1.GC回收什么? 上一篇讲了内存的分布. 其中程序计数器栈,虚拟机栈,本地方法栈 3个区域随着线程而生,随着线程而死.这些栈的内存,可以理解为 ...

  5. 《深入理解Java虚拟机》读书笔记-垃圾收集器与内存分配策略

    在堆里存放着java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前需要知道哪些对象还存活,哪些对象已经死去.那怎么样去判断对象是否存活呢? 一.判断对象是否存活算法 1.引用计数法 实现思路:给 ...

  6. JVM学习笔记-第三章-垃圾收集器与内存分配策略

    JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...

  7. 深入了解Java虚拟机(2)垃圾收集器与内存分配策略

    垃圾收集器与内存分配策略 由于JVM中对象的频繁操作是在堆中,所以主要回收的是堆内存,方法区中的回收也有,但是比较谨慎 一.对象死亡判断方法 1.引用计数法 就是如果对象被引用一次,就给计数器+1,否 ...

  8. 读书笔记,《深入理解java虚拟机》,第三章 垃圾收集器与内存分配策略

    要实现虚拟机,其实人们主要考虑完成三件事情: 第一,哪些内存需要回收: 第二,什么时候回收: 第三,如何回收. 第二节,对象已死吗    垃圾收集其实主要是针对java堆里面的数据来说的,传统的垃圾收 ...

  9. 深入理解Java虚拟机 第三章 垃圾收集器 笔记

    1.1   垃圾收集器 垃圾收集器是内存回收的具体实现.以下讨论的收集器是基于JDK1.7Update14之后的HotSpot虚拟机.这个虚拟机包含的所有收集器有: 上图展示了7种作用于不同分代的收集 ...

随机推荐

  1. Wireshark协议分析工具应用

    一.Wireshark简介与安装 Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用W ...

  2. 深入理解CSS绝对定位absolute

    前面的话 前面已经介绍了定位的偏移和层叠,例子中大量的应用了绝对定位.因为相较于相对定位和固定定位,绝对定位在实际中应用频率更高.应用场景更广泛.本文将介绍使用绝对定位时的具体细节 定义 当元素绝对定 ...

  3. Square Root

    Square RootWhen the square root functional configuration is selected, a simplified CORDIC algorithm ...

  4. Django的datetime.timedelta类(Django编程-2)

    datetime.timedelta对象代表两个时间之间的时间差,两个date或datetime对象相减就可以返回一个timedelta对象. 如果有人问你昨天是几号,这个很容易就回答出来了.但是如果 ...

  5. pgm13

    这部分开始,我们将讨论 learning 相关的内容.PGM 为 frequentist 与 Bayesian 系的 model 提供了同一种语言,对前者来说 learning 就是确定一种对“未知但 ...

  6. 在finally块中使用try catch,并且catch的时候抛出异常的一个问题

    在finally中使用try/catch,并且catch的时候抛出异常 IDEA会提示警告 Reports throw statements inside of finally blocks. Whi ...

  7. MT【218】交点个数

    若函数$f(x)=x^3+ax^2+bx+c$有极值点$x_1,x_2$,且$f(x_1)=x_1$,则关于$x$的方程$3(f(x))^2+2af(x)+b=0$的不同实数根个数为_____ 注意到 ...

  8. MT【67】窥一斑知全豹

    已知$f(x)=ax^2+bx+c$在$x\in\{-1,0,1\}$时满足$|f(x)|\le1$ 求证:当$|x|\le1$时$|f(x)|\le\frac{5}{4}$. 证明: $$f(x)= ...

  9. MT【55】近零点

    [Among the natural enemy of mathematics, the most important thing is that how do we konw     somethi ...

  10. Dominator Tree & Lengauer-Tarjan Algorithm

    问题描述 给出一张有向图,可能存在环,对于所有的i,求出从1号点到i点的所有路径上的必经点集合. 什么是支配树 两个简单的小性质—— 1.如果i是j的必经点,而j又是k的必经点,则i也是k的必经点. ...