作者:channingbreeze
出自:微信公众号“互联网侦查”
原文:【技术小说连载】我在JVM公司的那些年(十)——不一样的垃圾回收
小说连载系列是我第一次尝试的新的技术讲解方式,希望通过小说的形式将技术细节讲解清楚。
第一篇中长篇连载小说《我在JVM公司的那些年》,主要讲解JVM内部的一些原理,希望大家能够喜欢,多多支持。
欢迎大家转发文章,谢谢!
本节知识点预告:老年代垃圾回收。
大家好,我叫小史,是一个非科班程序员……哦,不,在这部小说中,我是一个java对象。
前情回顾:
java钢铁侠-马克51号:【小说连载】我在JVM公司的那些年(九)——潜规则zhuanlan.zhihu.comjava钢铁侠-马克51号:【技术小说连载】我在JVM公司的那些年(八)——死里逃生zhuanlan.zhihu.com
java钢铁侠-马克51号:【技术小说连载】我在JVM公司的那些年(七)——玉石俱焚zhuanlan.zhihu.com
java钢铁侠-马克51号:【技术小说连载】我在JVM公司的那些年(六)——智斗黑老大zhuanlan.zhihu.com
java钢铁侠-马克51号:【技术小说连载】我在JVM公司的那些年(五)——主动出击zhuanlan.zhihu.com
java钢铁侠-马克51号:【技术小说连载】我在JVM公司的那些年(四)——工位调整zhuanlan.zhihu.com
java钢铁侠-马克51号:【技术小说连载】我在JVM公司的那些年(三)——恐怖的垃圾回收zhuanlan.zhihu.com
java钢铁侠-马克51号:【技术小说连载】我在JVM公司的那些年(二)——残酷的制度zhuanlan.zhihu.com
java钢铁侠-马克51号:【技术小说连载】我在JVM公司的那些年(一)——奇怪的面试zhuanlan.zhihu.com
接受了公司潜规则,我在老年代也兢兢业业地工作起来。
老年代不愧是老年代,已经快一个月了,这里一次垃圾回收都没有发生,新生代都已经发生好几次垃圾回收了。
这对于公司来说,其实是有利的,垃圾回收的次数越少,我们工作时被打扰的次数就越少,就越能高效率地工作。
只是每一次新生代垃圾回收,都有几个同事进入老年代,慢慢的,老年代的工位也越来越紧张,已经快坐不下了。
垃圾回收
该来的还是来了。这天,我正在奋力运行代码,突然一队穿着警服的人闯进了老年代,我们立刻停下了手中的活。
队尾慢慢走来一个人,身穿一身警服,却是一副凶神恶煞的样子,他也是垃圾回收器。
原来老年代的垃圾回收器和新生代的垃圾回收器不是同一个人啊。
垃圾回收器开口说话了:“可能有些人还不认识我,自我介绍一下,我是垃圾回收器,负责老年代的垃圾回收工作,请大家配合一下。”
相比于新生代温文尔雅却冷酷的垃圾回收器来说,这位表面上凶神恶煞的垃圾回收器倒是更有礼貌,果然是人不可貌相。
垃圾回收器话音刚落,警队的人就冲了上来。但是与新生代直接把人带走不同的是,警队的人并没有一上来就把人带走,而是对大家进行标记,给在GCRoot引用链中的人做了一个记号。
记号做完之后,又来第二轮,直接对大家进行工位调整,让有记号的同事们从老年代区第一个工位开始依次排列。排好之后,把剩下的工位直接清空了。这次大概清理了6.25%的工位。
整个过程比新生代垃圾回收慢了很多。
我的工位也进行了调整,并且调整完之后,我和师兄坐在了一起。
讨论
垃圾回收器走了之后,我问师兄:“师兄,这老年代的垃圾回收和新生代完全不一样啊?”
师兄:“是的,老年代的这个垃圾回收算法叫做标记-整理算法。”
我一听有点耳熟:“我记得新生代一开始用的是标记-清除算法。”
师兄:“对的,但是标记-清除算法不是有一个致命的缺点么?”
我:“是的,我记得标记-清除算法会产生工位碎片,这将导致一些稍大一点的团队无法分配到连续的工位,必须分开坐。”
师兄:“没错,所以老年代的标记-整理算法在标记-清除算法上进行了改进,把大家的工位进行整理,把空余的工位归拢在一起,避免了工位碎片。”
我:“哦,原来如此,不过我还有一个问题啊,为什么老年代不像新生代一样,用复制算法呢?”
师兄:“这个问题问得好,这和这两个区的特点有关。新生代的特点是回收率高,一次回收之后,剩下的员工很少了,所以让他们迁移工位,把他们复制到另一个survior区,成本很小。但是老年代……”
我瞬间明白了:“老年代回收率低,如果采用复制算法,那么有很多员工需要复制,survior区也需要设置得很大,反而得不偿失了。”
师兄:“哈哈,说得没错,而且你要注意,因为新生代有两个survior区,它们是交替使用,所以其实survior区总体使用率只有50%。”
我:“哦,这也是复制算法的缺点之一呀。”
方法区
师兄:“对了,明天上班别迟到。明天方法区的人会过来和我们进行交流。”
方法区?就是有资格做GCRoot的人所在的区?哈哈,早就想会会他们了。
我:“没问题,明天我一定早来。”
(未完待续……)
小史已经挺过了老年代的垃圾回收,马上要会见方法区的大佬了,方法区的人和新生代老年代的人有什么区别?欲知后事如何,请听下回分解。
小结
老年代的垃圾回收采用标记-整理算法,之所以这样是因为老年代的回收率并不高,所以只需要将少量未被标记的对象清理就好,而为了防止内存碎片的产生,会对内存中的对象再进行一次整理,这种方法也有缺点,就是很慢。
下节知识点预告:方法区
Original url: Access
Created at: 2019-09-04 16:46:22
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论