HotSpot VM垃圾收集器
最常用的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垃圾收集器的更多相关文章
- JVM调优:HotSpot JVM垃圾收集器
HotSpot JVM垃圾收集器 - Snooper - 博客园https://www.cnblogs.com/snooper/p/8718478.html
- HotSpot JVM垃圾收集器
HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用. Serial(串行GC)收集器 Serial收集 ...
- HotSpot 的垃圾收集器
上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用,收集器所处的区域,则表示它是属于新生代还是老年代收集器. 并行(Parallel):指多条垃圾收集器线程并行工 ...
- java虚拟机(六)--垃圾收集器和内存分配策略
目前没有完美的收集器,不同的厂商.版本的虚拟机提供的垃圾收集器会有很大的差别,用户根据自己应用特点和要求组合出各个年代所使用 的收集器.基于jdk1.7Update14之后的虚拟机. HotSpot的 ...
- JVM学习(一)、垃圾收集器简介
一.垃圾收集算法 (1)标记-清除算法:最基础的收集算法“标记--清除”(Mark-sweep)算法,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的 ...
- 【006】【JVM——垃圾收集器总结】
Java虚拟机学习总结文件夹 JVM--垃圾收集器总结 垃圾收集器概览 收集算法是内存回收的方法论.垃圾收集据是内存回收的详细实现.Java虚拟机规范中对垃圾收集器应该怎样实现没有规定.不同的厂 ...
- JVM垃圾回收算法 及 垃圾收集器
摘自<深入理解Java虚拟机> 一.什么是: GC算法是 方法论,那么垃圾收集器就是具体的 实现. 二.四种 垃圾回收算法 1.标记-清除算法:最基础的收集算法:不足有两点:1标记和清除两 ...
- HotSpot垃圾收集器GC的种类
堆内存的结构:
- 6.HotSpot垃圾收集器
HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用. 并发和并行 先解释下什么是垃圾收集器的上下文语境 ...
随机推荐
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(八)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- express 框架的使用方法
express 框架的使用方法: 第一步: 生成一个 (express)项目工程 命令提示框的指令是: express (文件名) express -e (文件名) 两段指令的 ...
- 阿里面试官最喜欢问的21个HashMap面试题
1.HashMap 的数据结构? A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点.当链表长度超过 8 时,链表转换为红黑树. transient Node<K,V>\[\ ...
- Spring中的JDBC API
1 JdbcTemplate的诞生 JDBC作为Java平台访问关系数据库的标准API,其成功是有目共睹的.为了避免在JDBC API在使用中的种种尴尬局面(几乎程式一样的代码,繁琐的异常处理),Sp ...
- redis高级命令1
设置name的过期时间是20秒 redis默认是16个数据库,默认是将数据存储在第0个数据库中 因为默认是0,当你选择其他数据的时候,是没有值的
- MySql索引要注意的8个事情
设计好MySql索引可以让你的数据库查询效率大为提高.设计MySql索引的时候,有一些问题需要值得我们注意的: 1,创建MySql索引 对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简 ...
- 【Spring】@Transactional 闲聊
菜瓜:上次的AOP理论知识看完收获挺多的,虽然有一个自定义注解的demo,但还是觉得差点东西 水稻:我也觉得没有跟一遍源码还是差点意思,这次结合@Transactional注解深入源码看一下 菜瓜:事 ...
- Python 简明教程 --- 18,Python 面向对象
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 代码能借用就借用. -- Tom Duff 目录 编程可分为面向过程编程和面向对象编程,它们是两种不 ...
- 函数进化到Lambda表达式的三过程
假如我们想要从一个整型数组中取出其中是奇数的选项,其实现方式有很多, 接下来通过三种方法的对比理解Lambda表达式的用途,需要了解的朋友可以参考下 //声明委托类型 public d ...
- hive命令查询数据不显示表头解决办法
在hive命令行中查询数据如下: 表头未显示出来 解决办法: 修改hive安装包conf/hive-site.xml配置文件: <property> <name>hive.cl ...