目录

分代收集算法

HotSpot中的分代收集

年轻代

老年代


没有一种最好的算法吗?没有,没有最好只有最适合。具体问题具体分析!

上一篇文章《欧尼酱讲JVM(21)——垃圾回收相关算法》所介绍的所有这些算法中,并没有一种算法可以完全替代其他算法,它们都具有自己独特的优势和特点,分代收集算法应运而生。

其实在我看来分代收集算法是一种策略。

分代收集算法

分代收集算法是基于这样一个事实:不同的对象生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。一般是把Java堆分成新生代和老年代。这样就可以分局各个年代的特点使用不同的回收算法,以提高垃圾回收的效率。

在Java程序运行过程中,会产生大量的对象。其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较短,比如String对象,由于其不变类的特性,系统会产生大量的这些对象,有些对象甚至只用一次即可回收。

HotSpot中的分代收集

目前几乎所有的GC都是采用分代收集算法执行垃圾回收的。

在HotSpot中,基于分代的概念,GC所使用的内存回收算法必须结合年轻代和老年代各自的特点。

年轻代

年轻代特点:区域相对老年代较小,对象生命周期短、存活率低、回收频繁。

这种情况复制算法的回收整理,速度是最快的,复制算法的效率只和当前存活对象的大小有关,因此很适合用于年轻代的回收,而复制算法内存利用率不高的问题,通过HotSpot中的两个survivor的设计得到缓解。

老年代

老年代特点:区域较大,对象生命周期长、存活率高,回收不及年轻代频繁。

这种情况存在大量的存活率高的对象,复制算法明显变得不合适,一般是由标记清楚或者是标记清除与标记整理混合实现。

  • Mark阶段的开销与存活对象的数量成正比
  • Sweep阶段的开销与所管理区域的大小成正相关
  • Compact阶段的开销与存活对象的数据成正比

以HotSpot中的CMS回收器为例,CMS是基于Mark-Sweep实现的,对于对象的回收效率很高。而对于碎片问题,CMS采用基于Mark-Compact算法的Serial Old回收器作为补偿措施:当内存回收不佳(碎片导致的Concurrent Mode Failure时),将采用Serial Old执行Full GC以达到对老年代内存的整理。

分代思想被现有的虚拟机广泛使用。几乎所有的垃圾回收器都区分新生代和老年代。CMS是针对老年代的垃圾回收器。

欧尼酱讲JVM(22)——分代收集算法相关推荐

  1. JVM学习-分代收集算法

    分代收集算法 1.分代回收算法概述 1.1.分代回收算法简介 1.2.回收流程 1.3.回收流程总结 2.相关VM参数 3.GC分析 1.分代回收算法概述 1.1.分代回收算法简介 我们在前面讲了三种 ...

  2. 欧尼酱讲JVM(21)——垃圾回收相关算法

    目录 前言 垃圾标记阶段 对象存活判断 引用计数算法 原理 优缺点 举例 可达性分析算法 原理 优缺点 引用链 GC Roots 垃圾清除阶段 标记清除算法 清除过程 优缺点 何为清除 复制算法 原理 ...

  3. 欧尼酱讲JVM(01)——整体概览(导航)

    从业这么久了,输入了很多东西,趁我还算不老,趁我还有精力,我觉得把我的知识和经验整理一番,输出出来. 那么首先就从JVM开始吧.我将从以下几个方面讲解JVM: 欧尼酱讲JVM(02)--类的加载过程 ...

  4. java的标量和聚合量_欧尼酱讲JVM(16)——如何基于逃逸分析进行代码优化

    代码优化是一个涉及面很广的"工程",但是今天呢,本姑娘主要给大家分享基于逃逸分析,如何给代码做优化.那么逃逸分析是什么呢?我前面的文章也仔细的讲解过了,这里就不过多的赘述了.有不明 ...

  5. 欧尼酱讲JVM(17)——方法区详解有图有真相

    目录 位置图解 方法区的理解 方法区在哪里 方法区的基本理解 HotSpot中方法区的理解(演进过程) 方法区的内部结构 图解方法区内部结构 运行时常量池 class文件中常量池的理解 为什么需要常量 ...

  6. 【Android 内存优化】内存抖动 ( 垃圾回收算法总结 | 分代收集算法补充 | 内存抖动排查 | 内存抖动操作 | 集合选择 )

    文章目录 一. 垃圾回收算法总结 二. 分代收集算法补充 三. 查看 Java 虚拟机 四. 获取 Android 应用可使用最大内存 五. 内存抖动标志 六. 排查内存抖动 七. 常见的造成内存抖动 ...

  7. 26 Java GC算法 垃圾收集器、标记 -清除算法、复制算法、标记-压缩算法、分代收集算法

    26.Java GC算法 垃圾收集器 1.1.1标记 -清除算法 1.1.2复制算法 1.1.3标记-压缩算法 1.1.4分代收集算法 26.Java GC算法 垃圾收集器 概述 垃圾收集 Garba ...

  8. 【Android 内存优化】垃圾回收算法 ( 分代收集算法 | Serial 收集器 | ParNew 收集器 | Parallel Scavenge 收集器 | CMS 并发标记清除收集器 )

    文章目录 一. 分代收集算法 二. 垃圾回收器 / 收集器 ( GC ) 三. 串行收集器 ( Serial ) 四. ParNew 收集器 五. Parallel Scavenge 收集器 六. C ...

  9. 2、垃圾回收算法(标记清除算法、复制算法、标记整理算法和分代收集算法),各种垃圾收集器讲解(学习笔记)

    2.垃圾回收概述 2.1.垃圾回收算法 2.1.1.垃圾回收算法-标记清除算法 2.1.2.垃圾回收算法–复制算法 2.1.3.垃圾回收算法–标记整理算法和分代收集算法 2.1.4.垃圾回收算法–Se ...

最新文章

  1. 【高清大图下载】机器学习从入门到精通思维导图
  2. jQuery里面的datepicker日期控件默认是显示英文的,如何显示中文或其他语言呢?...
  3. SEO之网站页面优化策略
  4. 永远的Macromedia, Macromedia Forever
  5. FeignClient调用服务及上传文件的注意点及问题
  6. [译] 论 Rust 和 WebAssembly 对源码地址索引的极限优化
  7. 《中国人工智能学会通讯》——11.34 基于近似动态规划的优化控制研究及 在电力系统中的应用...
  8. JAVA 中的 CAS
  9. MFC CListCtrl 将一个列表的选中项添加到另一个列表
  10. c primer plus 第6版 中文版pdf_内功实力再精进 试驾上汽大通V80 PLUS城市版
  11. Python 根据身份证号判断所属省份,生日与性别
  12. java 核型技术 卷2 pdf,NGS-analysis/Structural-Variation.md at master · zhuhuo/NGS-analysis · GitHub...
  13. Google Guava与字符串操作相关的类
  14. 记YY的一次面试经历
  15. 杨老师课堂_Java教程第一篇之认识计算机
  16. “应试教育的死穴,恰在于堵住了孩子“犯错”空间”——有感
  17. anchor box 是如何确定的?
  18. 一键下载M3U8/HLS 并保存为TS文件
  19. CANopen是个啥?
  20. c语言中数组f30 a 5,C语言程序设计第7章new.ppt

热门文章

  1. uni-app实现二维码以及小程序实现二维码
  2. [RPI2]wiringPi驱动5110
  3. 计算机毕业论文基于springboot幼儿园管理系统
  4. 智能手术机器人起源及应用(一)
  5. python实现类似于visio_9款在线作图工具:那些可以替代Visio的应用
  6. 【Ubuntu】APT下载工具
  7. 物联网平台功能解析(一):“不赚钱”的连接管理平台
  8. Kali渗透测试:使用browser_autopwn2模块进行渗透攻击
  9. npoi 实现类似excel、word自身的加密解密效果
  10. docker run 提示 refusing to operate on /etc/resolv.conf: unknown.