欧尼酱讲JVM(22)——分代收集算法
目录
分代收集算法
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)——分代收集算法相关推荐
- JVM学习-分代收集算法
分代收集算法 1.分代回收算法概述 1.1.分代回收算法简介 1.2.回收流程 1.3.回收流程总结 2.相关VM参数 3.GC分析 1.分代回收算法概述 1.1.分代回收算法简介 我们在前面讲了三种 ...
- 欧尼酱讲JVM(21)——垃圾回收相关算法
目录 前言 垃圾标记阶段 对象存活判断 引用计数算法 原理 优缺点 举例 可达性分析算法 原理 优缺点 引用链 GC Roots 垃圾清除阶段 标记清除算法 清除过程 优缺点 何为清除 复制算法 原理 ...
- 欧尼酱讲JVM(01)——整体概览(导航)
从业这么久了,输入了很多东西,趁我还算不老,趁我还有精力,我觉得把我的知识和经验整理一番,输出出来. 那么首先就从JVM开始吧.我将从以下几个方面讲解JVM: 欧尼酱讲JVM(02)--类的加载过程 ...
- java的标量和聚合量_欧尼酱讲JVM(16)——如何基于逃逸分析进行代码优化
代码优化是一个涉及面很广的"工程",但是今天呢,本姑娘主要给大家分享基于逃逸分析,如何给代码做优化.那么逃逸分析是什么呢?我前面的文章也仔细的讲解过了,这里就不过多的赘述了.有不明 ...
- 欧尼酱讲JVM(17)——方法区详解有图有真相
目录 位置图解 方法区的理解 方法区在哪里 方法区的基本理解 HotSpot中方法区的理解(演进过程) 方法区的内部结构 图解方法区内部结构 运行时常量池 class文件中常量池的理解 为什么需要常量 ...
- 【Android 内存优化】内存抖动 ( 垃圾回收算法总结 | 分代收集算法补充 | 内存抖动排查 | 内存抖动操作 | 集合选择 )
文章目录 一. 垃圾回收算法总结 二. 分代收集算法补充 三. 查看 Java 虚拟机 四. 获取 Android 应用可使用最大内存 五. 内存抖动标志 六. 排查内存抖动 七. 常见的造成内存抖动 ...
- 26 Java GC算法 垃圾收集器、标记 -清除算法、复制算法、标记-压缩算法、分代收集算法
26.Java GC算法 垃圾收集器 1.1.1标记 -清除算法 1.1.2复制算法 1.1.3标记-压缩算法 1.1.4分代收集算法 26.Java GC算法 垃圾收集器 概述 垃圾收集 Garba ...
- 【Android 内存优化】垃圾回收算法 ( 分代收集算法 | Serial 收集器 | ParNew 收集器 | Parallel Scavenge 收集器 | CMS 并发标记清除收集器 )
文章目录 一. 分代收集算法 二. 垃圾回收器 / 收集器 ( GC ) 三. 串行收集器 ( Serial ) 四. ParNew 收集器 五. Parallel Scavenge 收集器 六. C ...
- 2、垃圾回收算法(标记清除算法、复制算法、标记整理算法和分代收集算法),各种垃圾收集器讲解(学习笔记)
2.垃圾回收概述 2.1.垃圾回收算法 2.1.1.垃圾回收算法-标记清除算法 2.1.2.垃圾回收算法–复制算法 2.1.3.垃圾回收算法–标记整理算法和分代收集算法 2.1.4.垃圾回收算法–Se ...
最新文章
- 【高清大图下载】机器学习从入门到精通思维导图
- jQuery里面的datepicker日期控件默认是显示英文的,如何显示中文或其他语言呢?...
- SEO之网站页面优化策略
- 永远的Macromedia, Macromedia Forever
- FeignClient调用服务及上传文件的注意点及问题
- [译] 论 Rust 和 WebAssembly 对源码地址索引的极限优化
- 《中国人工智能学会通讯》——11.34 基于近似动态规划的优化控制研究及 在电力系统中的应用...
- JAVA 中的 CAS
- MFC CListCtrl 将一个列表的选中项添加到另一个列表
- c primer plus 第6版 中文版pdf_内功实力再精进 试驾上汽大通V80 PLUS城市版
- Python 根据身份证号判断所属省份,生日与性别
- java 核型技术 卷2 pdf,NGS-analysis/Structural-Variation.md at master · zhuhuo/NGS-analysis · GitHub...
- Google Guava与字符串操作相关的类
- 记YY的一次面试经历
- 杨老师课堂_Java教程第一篇之认识计算机
- “应试教育的死穴,恰在于堵住了孩子“犯错”空间”——有感
- anchor box 是如何确定的?
- 一键下载M3U8/HLS 并保存为TS文件
- CANopen是个啥?
- c语言中数组f30 a 5,C语言程序设计第7章new.ppt
热门文章
- uni-app实现二维码以及小程序实现二维码
- [RPI2]wiringPi驱动5110
- 计算机毕业论文基于springboot幼儿园管理系统
- 智能手术机器人起源及应用(一)
- python实现类似于visio_9款在线作图工具:那些可以替代Visio的应用
- 【Ubuntu】APT下载工具
- 物联网平台功能解析(一):“不赚钱”的连接管理平台
- Kali渗透测试:使用browser_autopwn2模块进行渗透攻击
- npoi 实现类似excel、word自身的加密解密效果
- docker run 提示 refusing to operate on /etc/resolv.conf: unknown.