最常用的HotSpot VM垃圾收集器是分代垃圾收集。该方案是基于两个观察事实。

  • 大多数分配对象的存活时间很短。
  • 存活时间久的对象很少引用存活时间短的对象。

上述两个观察事实统称为弱分代假设(Weak Generational Hypothesis)。基于此假设,HotSpot VM将堆分成2个物理去。

1、新生代:大多数创建的对象被分配到新生代中,与整个Java堆相比,通常新生代收集(主要是Minor GC)之后的存活对象时间短,垃圾收集的效率高。

  新生代分为两块Eden和Survior。新创建的对象被分配到Eden中,当Eden中的空间使用完以后,就会运行Minor GC将Eden中的存活对象复制到Survivor中的To空间,同时Survivor空间中的From区域内如果有没有被回收的对象,也会被copy到To空间中,老年代中被修改过指针应用的对象也会被copy到Survivor区域,最后From和To交换位置。通常可以采用Serial收集器和Parallel收集器来实现。前者是单线程的,后者是多线程的支持并发。在垃圾回收的过程中,程序的运行是被终止的,等Serial GC或parallel GC执行完以后,程序继续执行。

2、老年代:新生代中长期存活的对象最后被提升到老年代。老年代的空间比新生代的大,而空间占用的增长速度比新生代慢。老年代主要采用Ful GC来完成垃圾收集,Full GC的执行频率低,但是一旦发生,执行时间就会很长。

  当Survivor中可能不足以容纳Eden和另一个Survivor中存活对象时。如果Survivor中的存活对象溢出,多余的对象将被移到老年代。当老年代已经如法容纳更多的对象时,就会调用Full GC来进行垃圾回收。在垃圾回收的过程中,程序的运行是被终止的,等Full GC执行完以后,程序继续执行。

3、永久代:这是HotSpot VM内存中的第3块区域。用户程序创建的对象最终并不会从老年代移送到永久代。相反,HotSpot VM只是用它来存储元数据,例如类的数据结构、保留字符串等。

HotSpot VM垃圾收集器的更多相关文章

  1. JVM调优:HotSpot JVM垃圾收集器

    HotSpot JVM垃圾收集器 - Snooper - 博客园https://www.cnblogs.com/snooper/p/8718478.html

  2. HotSpot JVM垃圾收集器

    HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用. Serial(串行GC)收集器 Serial收集 ...

  3. HotSpot 的垃圾收集器

    上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用,收集器所处的区域,则表示它是属于新生代还是老年代收集器. 并行(Parallel):指多条垃圾收集器线程并行工 ...

  4. java虚拟机(六)--垃圾收集器和内存分配策略

    目前没有完美的收集器,不同的厂商.版本的虚拟机提供的垃圾收集器会有很大的差别,用户根据自己应用特点和要求组合出各个年代所使用 的收集器.基于jdk1.7Update14之后的虚拟机. HotSpot的 ...

  5. JVM学习(一)、垃圾收集器简介

    一.垃圾收集算法 (1)标记-清除算法:最基础的收集算法“标记--清除”(Mark-sweep)算法,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的 ...

  6. 【006】【JVM——垃圾收集器总结】

     Java虚拟机学习总结文件夹 JVM--垃圾收集器总结 垃圾收集器概览 收集算法是内存回收的方法论.垃圾收集据是内存回收的详细实现.Java虚拟机规范中对垃圾收集器应该怎样实现没有规定.不同的厂 ...

  7. JVM垃圾回收算法 及 垃圾收集器

    摘自<深入理解Java虚拟机> 一.什么是: GC算法是 方法论,那么垃圾收集器就是具体的 实现. 二.四种 垃圾回收算法 1.标记-清除算法:最基础的收集算法:不足有两点:1标记和清除两 ...

  8. HotSpot垃圾收集器GC的种类

      堆内存的结构:

  9. 6.HotSpot垃圾收集器

    HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用. 并发和并行 先解释下什么是垃圾收集器的上下文语境 ...

随机推荐

  1. (五)连接查询(SQL99标准)、子查询、分页查询、联合查询

    一.连接查询(SQL99标准) 1.含义:当要查询的数据来自多张表时要使用连接查询 2.语法: select 查询列表 from 表1 别名 [连接类型] join 表2 别名 on 连接条件 [wh ...

  2. phoenix从入门到精通

      第一章.phoenix入门简介 1. Phoenix定义 Phoenix最早是saleforce的一个开源项目,后来成为Apache基金的顶级项目. Phoenix是构建在HBase上的一个SQL ...

  3. C++ Primer Plus(一)

    完整阅读C++ Primer Plus 系统重新学习C++语言部分,记录重要但易被忽略的,关键但易被遗忘的. 预备 1.C++相对于C增加了最关键的两项,面向对象和范型编程. 处理数据 2.对于变量明 ...

  4. startActivityForResult调用另外一个Activity获取返回结果

    startActivityForResult(intent,requestCode)可以调用另外一个Activity,并返回结果. 换头像案例 activity_main.xml <?xml v ...

  5. vc6.0的项目如何在整个项目中查询内容呢?试试vs2015

    vc6.0的项目如何在整个项目中查询内容呢?试试vs2015 https://blog.csdn.net/txwtech/article/details/101308795

  6. demo的自动化测试框架设计

    [准备环境] pycharm [思路] Python+request+unittest+HTMLTestRunner 框架 框架的可读性需要强 公共方法提取 可变参数需要提取放入配置文件 做好日志记录 ...

  7. 【论文笔记】Pyramidal Convolution: Rethinking Convolutional Neural Networks for Visual Recognition

    地址:https://arxiv.org/pdf/2006.11538.pdf github:https://github.com/iduta/pyconv 目前的卷积神经网络普遍使用3×3的卷积神经 ...

  8. tomcat中AJP协议和HTTP协议的区别

    tomcat的server.xml中的AJP和HTTP连接器区别 HTTP协议:连接器监听8080端口,负责建立HTTP连接.在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器. ...

  9. 入门大数据---Hbase是什么?

    一.Hbase是什么? Hbase属于NoSql的一种. NoSql数据库分为如下几类: Key-Value类型数据库 这类数据库主要会使用到一个哈希表,这个表有一个特定的键和一个指针指向特定的数据. ...

  10. 关于Maven我应该知道的事

    https://www.cnblogs.com/best/p/9676515.html bilibili 这里不是入门指南, 而是一些个人使用遇到的问题参考 一.环境 Maven 版本JDK要求 Ma ...