首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java G1学习笔记

初衷 在G1提出之前,经典的垃圾收集器主要有三种类型:串行收集器、并行收集器和并发标记清除收集器,这三种收集器分别可以是满足Java应用三种不同的需求:内存占用及并发开销最小化、应用吞吐量最大化和应用GC...G1设计了一个标记阈值,它描述的是总体Java堆大小的百分比,默认值是45,这个值可以通过命令-XX:InitiatingHeapOccupancyPercent(IHOP)来调整,一旦达到这个阈值就回触发一次并发收集周期...增加或减少这个值,请确保对总的 Java 堆调整相同的量 10 -XX:G1HeapRegionSize=n 分区的大小 堆内存大小的1/2000,单位是MB,值是2的幂,范围是1MB到32MB之间 -...Garbage-First Garbage Collector 《Java性能权威指南》 《Java性能调优指南》 G1入门,O记官网的PPT Java Hotspot G1 GC的一些关键技术 G1...GC的论文 R大关于G1 GC的帖子 Tips for Tuning the Garbage First Garbage Collector Java性能调优指南 Java性能权威指南 G1: What

1.1K10

Java 新型垃圾回收器(Garbage First,G1)

G1目标 G1 is planned as the long term replacement for the Concurrent Mark-Sweep Collector....计划将G1作为CMS收集器的长久替代物。 它是为了平衡 延时和吞吐量之间的一种最优关系。...基本概念 G1 堆布局 G1将堆分成若干固定大小的Region/区域(区域大小只有1、2、4、8、16和32M),G1的新生代和老年代都是一个无需连续的区域集合,每一个区域独立进行内存的分配和回收,区域是内存管理的基本单元...这个阶段由多个混合的收集动作组成,不仅包含新生代区域,同时也会排除老年代区域的存活对象,当G1发觉依然无法满足空闲的空间请求时,G1会终止本阶段。...G1 Vs. 传统垃圾回收器 G1 不区分新/老生代,只区分Region G1 收集分2个阶段Young-only 和Space-reclamation

55720
您找到你想要的搜索结果了吗?
是的
没有找到

JVM进阶(十一):JAVA G1收集器

同优秀的CMS垃圾回收器一样,G1也是关注最小时延的垃圾回收器,也同样适合大尺寸堆内存的垃圾收集,官方也推荐使用G1来代替选择CMS。...先讲讲G1收集器的特点,G1收集器也是个多线程的收集器,能够充分利用多个CPU进行工作,收集方式也与CMS收集器类似,因此不会有太久的停顿。 虽然回收的范围是整个堆,但还是有分代回收的回收方式。...事实上,G1收集器与串行收集器、并行收集器、并发标记清除收集器这三组收集器有很大不同: G1的设计原则是”首先收集尽可能多的垃圾(Garbage First)”。...由于都是以相等大小的分区为单位进行操作,因此G1天然就是一种压缩方案(局部压缩); G1虽然也是分代收集器,但整个内存分区不存在物理上的年轻代与老年代的区别,也不需要完全独立的survivor(to space...G1只有逻辑上的分代概念,或者说每个分区都可能随G1的运行在不同代之间前后切换; G1的收集都是STW的,但年轻代和老年代的收集界限比较模糊,采用了混合(mixed)收集的方式。

28810

神奇的G1——Java全新垃圾回收机制

G1全称是Garbage First Garbage Collector,使用G1的目的是简化性能优化的复杂性。例如,G1的主要输入参数是初始化和最大Java堆大小、最大GC中断时间。...因为G1的操作以Region为基础,因此它适用于大Java堆。即便Java堆很大,大量的GC工作可以被限制在小型Region集合里面。...G1允许用户指定停顿时间目标,G1通过自适应的堆大小来满足这个目标。 ※G1 GC深度原理 G1把整个Java堆划分为若干个区间(Regions)。...如果没有连续的可用Regions,G1会做一个Java heap的full gc去压缩对象。...G1通过将Heap划分为多个Region,可以让G1操作可以在一个Region里面执行而不是整个Java堆或者整个年代(Generation)。

2.2K10

深入理解JavaG1垃圾回收器

摘要 本文旨在深入探讨Java虚拟机(JVM)中的G1垃圾回收器,包括其工作原理、性能特点、配置调优以及实际使用中的代码示例。...G1垃圾回收器以其并行与并发能力、停顿时间可预测性在高性能Java应用中备受青睐。 一、引言 简要介绍Java的垃圾回收机制,以及为何需要不同类型的垃圾回收器来满足不同应用场景的需求。...四、G1垃圾回收器的配置与调优 提供配置G1垃圾回收器的JVM参数建议,如: -XX:+UseG1GC:启用G1垃圾回收器。 -Xmx 和 -Xms:设置Java堆的最大和初始大小。...讨论如何通过调整这些参数来优化G1的性能,以满足特定应用的需求。 五、代码示例与实践 提供一些简单的Java代码示例,演示如何在实际应用中使用和监控G1垃圾回收器。...小结 G1(Garbage-First)垃圾回收器是Java HotSpot虚拟机中的一种,主要用于服务端应用。它设计的主要目标是满足具有大内存容量的多核处理器的系统需求,并能提供较高的吞吐量。

32010

Java11 的 G1 垃圾收集器

所以 G1 通过记忆集的形式记录了老年代对新生代的引用。具体在 G1 中通过 CarTable 来实现记忆集。 RSet(记忆集) 记录了其它 Region 中的对象到 Region 的引用。...参考:https://sdww2348115.github.io/jvm/g1/PausePredictionModel G1 垃圾收集周期 图片来源 Oracle 官网 G1 有两个阶段,它会在这两个阶段往返...G1 在每一次 Young 回收中都会查找活对象 (有引用的对象) G1 在 old region 并发查找存活对象 是 Concurrent Marking 可能花费很长时间 不会停止 Java 应用...GC 日志分析 下面是网上找的一个 GC 日志案例,解析如下(配合 G1 垃圾收集周期结合来看): [gc,start ] GC(44265) Pause Young (Normal) (G1.../4273516/blog/4550072 【跨代引用】 https://blog.csdn.net/weixin_47184173/article/details/113627337 【空闲时自动将Java

31420

java9系列(九)Make G1 the Default Garbage Collector

序 本文主要研究下JEP 248: Make G1 the Default Garbage Collector 默认垃圾收集器 java9废弃了CMS垃圾收集器,并把G1提升为默认垃圾收集器,替代了原来的吞吐优先的...目标是根据最小的Java堆大小划分出约2048 个区域. Humongous Object/ Humongous区域 对于G1 GC,任何超过区域一半大小的对象都被视为“巨型对象”。...默认值是Java堆的10% -XX:G1MixedGCCountTarget=8 设置标记周期完成后,对存活数据上限为 G1MixedGCLIveThresholdPercent 的旧区域执行混合垃圾回收的目标次数...增加或减少百分比时,请确保对总的Java 堆调整相同的量 避免使用-Xmn选项或-XX:NewRatio等其他相关选项显式设置年轻代大小,固定年轻代的大小会禁用掉暂停时间(MaxGCPauseMillis...深入理解 Java G1 垃圾收集器 Java 9中的GC调优基础 Java Hotspot G1 GC的一些关键技术 Garbage First G1收集器 理解和原理分析 Tuning Java Garbage

79020

JVM - G1初探

---- G1的内存分区 ? G1Java堆内存划分为多个大小相等的独立区域(Region),JVM最多可以有2048个Region。 一般一个Region的大小 = 堆内存/2048 ....G1在淡化分代理论上还不是很彻底, G1保留了年轻代和老年代的概念,但不再是物理隔阂了,它们是(可以不连续)Region的集合。...部分其他收集器原本需要停顿Java线程来执行GC动作,G1收集器仍然可以通过并发的方式让java程序继续执行。...可预测的停顿:这是G1相对于CMS的另一个大优势,降低停顿时间是G1 和 CMS 共同的关注点,但G1 除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为M毫秒的时间片段(通过参数...www.oracle.com/technetwork/tutorials/tutorials-1876574.html https://www.oracle.com/technical-resources/articles/java

77130

CMS和G1

G1收集器 Garbage First收集器,首次提出了局部收集的设计思路和基于Region的内存布局。 对于G1来说,其每次收集的区域不再是整个年轻代、老年代或者整个堆。...CMS和G1的比较 G1替换掉CMS已经成为不可逆转的趋势,下面就G1为何比CMS优秀加以说明: 1)G1基于Region的局部回收避免了全堆进行垃圾回收,再加上其按照动态受益确定回收集极大的提升了回收效率...2)G1总体上采用的是标记-整理算法,局部(region之间)采用的是标记-复制算法,与CMS的标记-清除算法相比,其不会产生内存碎片。...G1也存在他的缺点: G1的卡表所占的空间巨大,由于每个Region都要拥有一张卡表,如此导致记忆集要占20%左右的堆空间,而CMS中只需要维护老年代指向新生代的一张卡表即可。

85431

Java垃圾收集器之G1介绍(一)

的体系结构: JVM主要组件包括,类加载器,运行时内存区,以及执行引擎,程序员主要关注的应该是运行时区域这块了, 回顾下类加载器的顺序: ->Boostrap ClassLoad 引导类,加载java...ClassLoad 加载class path环境内的jar -> (User Difine ClassLoad) //用户自定义的加载器 需要继承ClassLoad抽象类,重写其中的一些方法 在Java...垃圾收集器: 一:G1垃圾收集器介绍 G1垃圾收集器是服务端的垃圾回收器,它的应用目标主要是在多CPU和大内存的应用场景中,旨在大多数情况下,在可预测的垃圾回收时间内,获得更大的吞吐量为目标,G1...(3)可预测的GC停顿时间 (4)更高的吞吐量 (5)小内存的Java堆也可以用G1 G1收集器的长远目标旨在替代CMS垃圾收集器,当然现在G1还不太成熟,CMS垃圾收集器,仍是电商类,B/S网站类...三:推荐使用G1的场景 G1垃圾收集器集中几种的应用场景是在应用程序有大内存并且要求极小的延迟的情况下,这意味着堆内存应该至少6G以上,稳定的可预测的停顿时间在0.5秒以下。

94150

通过 G1 GC Log 重新认识 G1 垃圾回收器

引言 上一篇文章中,我们详细介绍了 CMS 的配置参数以及 gc log 的解读: JAVA 性能调优 -- 带你解读 CMS GC 日志 但事实上,g1 由于他的诸多优势已经越来越多的受到 java...此前,我们已经深入介绍了 g1 垃圾回收的机制以及相应的配置: 驾驭一切的垃圾收集器 -- G1 本文,我们就来详细介绍一下 g1 的 gc log,让你能够通过 g1 的 gc log 分析出性能问题出在哪里...G1TraceEagerReclaimHumongousObjects # 跟踪并输出超大对象回收相关信息 -XX:+G1ConcRegionFreeingVerbose # Debug JVM 3. gc 日志的自动分割 对于线上持续运行的 java...G1 的 gc log 4.1 young gc 如图所示,相较于 CMS 的 GC 日志,G1 的 GC 日志信息更为详细。...4.4 FULL GC 在 G1 中,full gc 是我们要极力避免的,他是整个堆内存的完整收集,因此,G1 中的 full gc 通常意味着一个漫长的 stw 暂停。

96220

Java Hotspot G1 GC的一些关键技术

Do not require a much larger Java heap....不需要更大的Java Heap。 G1收集器的设计目标是取代CMS收集器,它同CMS相比,在以下方面表现的更出色: G1是一个有整理内存过程的垃圾收集器,不会产生很多内存碎片。...ParallelGCThreadsSTW期间,并行GC线程数-XX:ConcGCThreads=n并发标记阶段,并行执行的线程数-XX:InitiatingHeapOccupancyPercent设置触发标记周期的 Java...这里的java堆占比指的是non_young_capacity_bytes,包括old+humongous GC日志 G1收集器的日志与其他收集器有很大不同,源于G1独立的体系架构和数据结构,下面这两段日志来源于美团点评的...30464K, reserved 1077248K class space used 3391K, capacity 3480K, committed 3584K, reserved 1048576K java

54600

Java Hotspot G1 GC的一些关键技术

Do not require a much larger Java heap....不需要更大的Java Heap。 G1收集器的设计目标是取代CMS收集器,它同CMS相比,在以下方面表现的更出色: G1是一个有整理内存过程的垃圾收集器,不会产生很多内存碎片。...ParallelGCThreadsSTW期间,并行GC线程数-XX:ConcGCThreads=n并发标记阶段,并行执行的线程数-XX:InitiatingHeapOccupancyPercent设置触发标记周期的 Java...这里的java堆占比指的是non_young_capacity_bytes,包括old+humongous GC日志 G1收集器的日志与其他收集器有很大不同,源于G1独立的体系架构和数据结构,下面这两段日志来源于美团点评的...30464K, reserved 1077248K class space used 3391K, capacity 3480K, committed 3584K, reserved 1048576K java

1.4K20

Java HotSpot G1垃圾优先型垃圾回收器调优

G1 GC是适用于 Java HotSpot VM 的低暂停、服务器风格的分代式垃圾回收器。G1 GC 使用并发和并行阶段实现其目标暂停时间,并保持良好的吞吐量。...现在,我们来看看如何针对评估、分析和性能来调整和调优 G1 GC。我们假定您对 Java 垃圾回收有基本的了解。...G1 GC 是区域化、分代式垃圾回收器,这意味着 Java 对象堆(堆)被划分成大小相同的若干区域。启动时,Java 虚拟机 (JVM) 会设置区域大小。...有关溢出和用尽的日志消息 当您在日志中看到目标空间溢出/用尽的消息时,意味着 G1 GC 没有足够的内存,供存活者和/或晋升对象使用。Java 堆不能扩展,因为已达到最大值。...G1 GC 的自适应特性使 JVM 命令行只需要软实时暂停时间目标的最大值以及 Java 堆大小的最大值和最小值,即可开始工作。

1.1K50

G1 垃圾回收器

同时G1可以根据用户设置的暂停时间目标自动调整年轻代和总堆大小,暂停目标越短年轻代空间越小、总空间就越大;2、G1采用内存分区(Region)的思路: 将内存划分为一个个相等大小的内存分区,回收时则以分区为单位进行回收...由于都是以相等大小的分区为单位进行操作,因此G1天然就是一种压缩方案(局部压缩); 区可分为年轻代(Eden、Survivor)、老年代(Old)、大对象(Humongous),但每个分区都可能随G1...的运行在不同代之间前后切换;3、G1只有逻辑上的分代概念: G1虽然也是分代收集器,但整个内存分区不存在物理上的年轻代与老年代的区别,G1将内存在逻辑上划分为年轻代和老年代。...为了满足暂停目标,G1可能不会一次将所有的候选分区收集掉, 因此G1可能会产生连续多次的混合收集与应用线程交替执行,每次STW的混合收集与年轻代收集过程相类似。...Region(化整为零,对区域进行管理,如可以加快标记速度、复制速度等) 3、整体上是 标记+整理 算法,两个区域之间是 复制 算法 知识拓展:1、G1Java堆划分为多个大小相等的独立区域

8500

G1收集器图解

G1在堆上分配内存和其他的GC有点不一样。现在我们来一步一步看下G1系统。 1、 G1堆结构 G1的堆结构就是把一整块内存区域切分成多个固定大小的块。...2、 G1内存分配 事实上,这些region最后又被分别标记为Eden,Survivor和old。...记住一点:G1不是像老一辈的那些垃圾回收器一样要求每一代的块是连续的,在G1中可以不是连续的。 4、G1中的一次Young GC 存活的对象被转移到一个/或多个survivor 块上去。...6、G1的老年代垃圾收集 就像CMS收集器一样,G1也是一个暂停少的收集器。下面这个流程图就描述了G1在老年代的各个收集阶段。...一步步了解老年代垃圾收集 结合上面的流程图,我们来看看在G1收集器中他们是如何和老生代互动的。

39620

入门G1垃圾回收器

适当增加了部分内容 以下章节省略 Purpose、Time to Complete、Introduction、Hardware and Software Requirements、Prerequisites、Java...Overview、Java Runtime Edition、Java Programming Language、Java Development Kit、Java Virtual Machine、Reviewing...summary Hotspot架构 Hotspot JVM架构有着非常强大的特性和能力,能够支持做到高性能并且大规模可扩展,比如:Hotspot JVM的JIT 编译器会动态的做优化,换句话说,这些优化即在Java...JIT编译器也会对性能产生很大的影响,只是一般是在更新版本的JVM中做调整 性能基础知识 一般讲到Java应用,主要关注两件事情:响应和吞吐量 响应 响应描述的是系统返回数据时快不快,比如: 桌面UI...它从JDK 7 update 4之后开始完全支持,它被设计成: 能像CMS收集器一样和应用线程并发的执行 空间紧凑,免去了冗长的GC暂停时间 GC暂停时间可预测 不想牺牲吞吐量 不需要更大的Java

60620
领券