G1中region不同区区别

简介: G1中region不同区区别

G1垃圾收集器中的Region区域

G1(Garbage-First)垃圾收集器是一种服务器端的垃圾收集器,用于替换老旧的CMS(Concurrent Mark-Sweep)收集器。G1收集器旨在以高概率满足垃圾收集(GC)暂停时间目标,同时还能保持良好的吞吐量。G1收集器通过将堆分割成多个大小相等的独立区域(Region)来实现其目标。这些区域可以分为几种类型,每种类型的区域都有其特定的用途。

Eden Region

  • 用途: Eden区是新对象分配的地方。当对象首次创建时,它们被分配到Eden区。
  • 特点: 在GC发生时,大多数Eden区中的对象都会被认为是垃圾并被清除,因为大部分新生代对象都是朝生夕死的。

Survivor Region

  • 用途: Survivor区用于存放从Eden区和其他Survivor区中幸存下来的对象。这些对象在经历了一次或多次垃圾收集后仍然存活。
  • 特点: Survivor区有两种类型:一种是From区,另一种是To区。在垃圾收集过程中,对象会从From区复制到To区。复制完成后,From区和To区的角色会互换。

Old Region

  • 用途: Old区用于存放长时间存活的对象。当对象在Survivor区中存活了足够长的时间(超过了设定的阈值)后,它们就会被晋升到Old区。
  • 特点: Old区中的对象通常不会像Eden区或Survivor区中的对象那样频繁地被回收,因此,当Old区被回收时,通常需要更长的暂停时间。

Humongous Region

  • 用途: Humongous区用于存放非常大的对象,这些对象的大小超过了单个Region的一半。
  • 特点: 为了存储这些大对象,G1会将连续的Region组合起来形成一个足够大的区域。这些区域的回收通常会在Full GC中处理。

空闲 Region

  • 用途: 空闲区是指那些当前没有被使用的Region。
  • 特点: 这些区域可以被视为资源池,用于未来的对象分配或者在GC过程中作为To区。

总结

G1垃圾收集器通过将堆内存划分为多个Region,可以更灵活地管理内存,减少GC暂停时间,并提高应用程序的性能。每种类型的Region都有其特定的角色和特点,这有助于G1实现其目标,即在保持高吞吐量的同时,尽可能地减少GC暂停时间。

相关文章
|
5月前
|
存储 程序员 编译器
C/C++程序内存区域划分以及各区域的介绍
C/C++程序内存区域划分以及各区域的介绍
|
存储 程序员 编译器
C语言内存分区(堆,栈,全局/静态存储区,自由存储区,代码区)与可执行程序的三段-(Text段,Date段,Bss段)
C语言内存分区(堆,栈,全局/静态存储区,自由存储区,代码区)与可执行程序的三段-(Text段,Date段,Bss段)
228 0
|
缓存
缓存区的类型
缓存区的类型
122 0
|
监控 算法 Java
请问什么时候对象分配会不在 TLAB 内分配
请问什么时候对象分配会不在 TLAB 内分配
请问什么时候对象分配会不在 TLAB 内分配
|
存储 算法 Java
JVM05_堆的概述、内存结构、复制算法、Minor|Major|Full GC、私有区域TLAB、对象分配、参数总结、逃逸分析、栈上分配、锁消除、标量替换(一)
①. 堆的概述(共享|垃圾回收) ②. 堆的内存结构 ③. 堆空间大小的设置 -Xms -Xmx ④. 新生代与老年代参数设置 NewRation SurvivorRatio
138 0
JVM05_堆的概述、内存结构、复制算法、Minor|Major|Full GC、私有区域TLAB、对象分配、参数总结、逃逸分析、栈上分配、锁消除、标量替换(一)
|
缓存 算法 Java
JVM05_堆的概述、内存结构、复制算法、Minor|Major|Full GC、私有区域TLAB、对象分配、参数总结、逃逸分析、栈上分配、锁消除、标量替换(二)
⑤. 复制算法 ⑥. Minor GC | Major GC | Full GC ⑦. 针对不同年龄阶段的对象分配原则 ⑧. TLAB(Thread Local Allocation Buffer)
127 0
JVM05_堆的概述、内存结构、复制算法、Minor|Major|Full GC、私有区域TLAB、对象分配、参数总结、逃逸分析、栈上分配、锁消除、标量替换(二)
Java内存区域对象的内存布局和访问定位(Header、Instance、Padding)
Java普通对象被创建出以后,就需要关注下它在JVM堆中的内存布局是什么样子的。 大致分为3个区域: 1.对象头(Header) 2.实例数据(Instance) 3.对齐补充(Padding) 1.对象头(Header) 对象头在JVM这本书中有个专门的章节去讲Class文件的布局,这一章还没有去看,因此,对于这个暂时没有什么概念。
7305 0