第三章 垃圾收集器与内存分配策略
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. pycharm5.0 快捷键大全osx

    官网链接https://resources.jetbrains.com/assets/products/pycharm/PyCharm_ReferenceCard_mac.pdf 一直想给别人安利py ...

  2. HAProxy+keepalived+MySQL 实现MHA中slave集群负载均衡的高可用

    HAProxy+keepalived+MySQL实现MHA中slave集群的负载均衡的高可用 Ip地址划分: 240    mysql_b2 242    mysql_b1 247    haprox ...

  3. Kivy 中文教程 实例入门 简易画板 (Simple Paint App):3. 随机颜色及清除按钮

    1. 随机颜色 通过前面的教程,咪博士已经带大家实现了画板的绘图功能.但是,现在画板只能画出黄色的图案,还十分单调,接下来咪博士就教大家,如何使用随机颜色,让画板变得五彩斑斓. 改进后的代码如下: f ...

  4. caffe配置NCCL

    设置Makefile.config 打开开关: USE_NCCL := 1, 并添加nccl库路径 USE_NCCL := 1 INCLUDE_DIRS += /path/nccl/build/inc ...

  5. maven依赖有一个步长原则 如果a 对 b和c都有依赖 如果b的步长近则使用b的

    maven依赖有一个步长原则 如果a 对 b和c都有依赖 如果b的步长近则使用b的

  6. Spring的编程式事务和声明式事务

    事务管理对于企业应用来说是至关重要的,当出现异常情况时,它也可以保证数据的一致性. Spring事务管理的两种方式 spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务使用Transa ...

  7. [CF791D]Bear and Tree Jumps

    题目描述 A tree is an undirected connected graph without cycles. The distance between two vertices is th ...

  8. 如何用ip代替机器名访问sharepoint site

    1. iis里绑定ip 2. AAM里加一条ip的记录

  9. 洛谷 P1158 导弹拦截(不是那个DP) 解题报告

    P1158 导弹拦截 题目描述 经过1111年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截.当工作半径为0时,则能够拦截与它位置恰好相同的导弹. ...

  10. 2018年湘潭大学程序设计竞赛 H统计颜色

    链接:https://www.nowcoder.com/acm/contest/105/H来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...