您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

阿里的垃圾怎么回收?Java G1源码分析与调优手册

时间:2020-06-23 10:22:26  来源:  作者:

G1是目前最成熟的垃圾回收器,已经广泛应用在众多公司的生产环境中。我们知道,CMS作为使用最为广泛的垃圾回收器,也有令人头疼的问题,即如何对其众多的参数进行正确的设置。G1的目标就是替代CMS,所以在设计之初就希望降低程序员的负担,减少人工的介人。但这并不意味着我们完全不需要了解G1的原理和参数调优。

这份PDF尝试从G1的原理出发,系统地介绍新生代回收、混合回收、FullGC、 并发标记、Refine 线程等内容;同时依托于jdk8u的源代码介绍Hotspot如何实现G1,通过对源代码的分析来了解G1提供了哪些参数、这些参数的具体意义;最后PDF内还设计了一些示例代码,给出了G1在运行这些示例代码时的日志,通过日志分析来尝试调整参数并达到性能优化,还分析了参数调整可能带来的负面影响。

这份PDF的作者是一位阿里P9的大神!

第1章垃圾回收概述

本章介绍垃圾回收的发展及使用的算法,同时还介绍一些重要并常见的术语。该章的知识不仅仅限于本书介绍的G1,对于研读JVM文章或者JVM源码都有帮助。

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

第2章G1的基本概念

本章介绍G1中的基本概念,包括分区、卡表、根集合、线程栈等和垃圾回收相关的基本知识点。

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

第3章G1的对象分配

本章介绍G1是如何分配对象的,包括TLAB和慢速分配,G1的对象分配和其他垃圾回收器的对象分配非常类似,只不过在分配的时候以分区为基础,除此之外没有额外的变化,所以该章知识不仅仅适用于G1也适用于其他垃圾回收器,最后介绍了参数调优,同样也适用于其他的垃圾回收器。

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

第4章G1的Refine线程

本章介绍G1 Refine 线程,包括G1如何管理和处理代际引用,从而加快垃圾回收速度,介绍了Refinement 调优涉及的参数;虽然CMS也有卡表处理代际引用,但是G1的处理和CMS并不相同,Refine 线程是G1新引入的部分。

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

第5章新生代回收

本章介绍新生代回收,包括G1如何进行新生代回收,包括对象标记、复制、分区释放等细节,还介绍了新生代调优涉及的参数。

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

第6章混合回收

本章介绍混合回收。主要介绍G1的并发标记算法及其难点,以及G1中如何解决这个难点,同时介绍了并发标记的步骤:并发标记、Remark (再标记)和清理阶段;最后还介绍了并发标记的调优参数。

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

这份蓝光版JAVA G1源码分析和调优PDF,由于内容过多,不浪费大家的时间,小编已经整理成册,需要免费领取的朋友,麻烦帮忙转发一下这篇文章+关注我,然后私信【调优】二字获取。

第7章Full GC

第7章介绍Full GC。在G1中,Full GC对整个堆进行垃圾回收,该章介绍G1的串行FullGC和JDK10之后的并行FullGC算法。

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

第8章G1中的引用处理

本章介绍垃圾回收过程中如何处理引用,该功能不是G1独有的,也适用于其他垃圾回收器。

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

第9章G1 的新特性:字符串去重

第9章介绍G1的新特性:字符串去重。根据OpenJDK的官方文档,该特性可平均节约内存13%左右,所以这是一个非常有用的特性,值得大家尝试和使用。另外,该特性和JDK中String类的intern方法有一些类似的地方,所以该章还比较了它们之间的不同。

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

第10章线程中的安全点

本章介绍线程中的安全点。安全点在实际调优中涉及的并不多,所以很多人并不是特别熟悉。实际上,垃圾回收发生时,在进入安全点中做了不少的工作,而这些工作基本上是串行进行的,这些事情很有可能导致垃圾回收的时间过长。该章除了介绍如何进入安全点之外,还介绍了在安全点中做的一些回收工作,以及当发现它们导致GC过长时该如何调优。

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

第11章垃圾回收器的选择、第12章新一代垃圾回收器

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

阿里的垃圾怎么回收?Java G1源码分析与调优手册
 
 
 

这份蓝光版Java G1源码分析和调优PDF,由于内容过多,不浪费大家的时间,小编已经整理成册,需要免费领取的朋友,麻烦帮忙转发一下这篇文章+关注我,然后私信【调优】二字获取。



Tags:垃圾回收   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
我们写过C语言、C++的朋友都知道,我们的C语言是没有垃圾回收这种说法的。手动分配、释放内存都需要我们的程序员自己完成。不管是“内存泄漏” 还是野指针都是让开发者非常头疼的问题。所以C语言开发这个讨论得最多的...【详细内容】
2021-11-26  Tags: 垃圾回收  点击:(27)  评论:(0)  加入收藏
其实,对于写代码来说,也有垃圾回收这个问题,这里所说的垃圾,指的是程序中不再需要的内存空间,垃圾回收指的是回收这些不再需要的内存空间,让程序可以重新利用这些释放的内存空间。...【详细内容】
2021-09-24  Tags: 垃圾回收  点击:(48)  评论:(0)  加入收藏
有很多人都听说过V8引擎,但可能不是很了解,V8名称叫Chrome V8,是由谷歌开源的一个高性能 JavaScript 引擎。该引擎采用 C++ 编写,Google Chrome 浏览器用的就是这个引擎。V8 可...【详细内容】
2020-09-27  Tags: 垃圾回收  点击:(102)  评论:(0)  加入收藏
。定位到根本原因,每个表达式都是一个类中一个方法。随着运行时间越长,执行次数增加,这些方法会被JIT优化编译进入到Code Cache中,导致CodeCache越来越大。解决方法:JIT有一些参...【详细内容】
2020-08-11  Tags: 垃圾回收  点击:(52)  评论:(0)  加入收藏
一、概况理解Java虚拟机垃圾回收机制的底层原理,是系统调优与线上问题排查的基础,也是一个高级Java程序员的基本功,本文就针对Java垃圾回收这一主题做一些整理与记录。Java垃...【详细内容】
2020-07-15  Tags: 垃圾回收  点击:(38)  评论:(0)  加入收藏
G1是目前最成熟的垃圾回收器,已经广泛应用在众多公司的生产环境中。我们知道,CMS作为使用最为广泛的垃圾回收器,也有令人头疼的问题,即如何对其众多的参数进行正确的设置。G1的...【详细内容】
2020-06-23  Tags: 垃圾回收  点击:(100)  评论:(0)  加入收藏
三色标记法介绍:三色标记法(tricolor mark-and-sweep algorithm)是传统 Mark-Sweep 的一个改进,它是一个并发的 GC 算法,在Golang中被用作垃圾回收的算法,但是也会有一个缺陷,可...【详细内容】
2020-01-30  Tags: 垃圾回收  点击:(46)  评论:(0)  加入收藏
Go的三色标记GC 引用计数:对每个对象维护一个引用计数,当引用该对象的对象被销毁时,引用计数减1,当引用计数器为0是回收该对象。 优点:对象可以很快的被回收,不会出现内存耗尽或达...【详细内容】
2019-12-05  Tags: 垃圾回收  点击:(107)  评论:(0)  加入收藏
一、内存管理机制先看一段代码:<?php//内存管理机制var_dump(memory_get_usage());//获取内存方法,加上true返回实际内存,不加则返回表现内存$a = "laruence";var_dump(memory_...【详细内容】
2019-09-19  Tags: 垃圾回收  点击:(143)  评论:(0)  加入收藏
什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对...【详细内容】
2019-07-09  Tags: 垃圾回收  点击:(290)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的&emsp;&emsp;程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条