面试知识汇总——垃圾回收器(G1垃圾回收器)

G1垃圾回收器

1.9后的默认垃圾回收算法,特点是保持高回收率率的同时减少停顿,每次只清理一部分,而不是全部的增量式清理,确保停顿时间不会过长

在HotSpot的实现中,整个堆被划分成2048左右个Region。每个Region的大小在1-32MB之间,具体多大取决于堆的大小。

每一个Region,它要么是young的,要么是old的。还有一类十分特殊的Humongous。所谓的Humongous,就是一个对象的大小超过了某一个阈值——HotSpot中是Region的1/2,那么它会被标记为Humongous。

遍历所有对象,标记引用情况,清除对象后对区域进行复制移动,整合碎片空间

每一次回收都是回收N个Region。这个N是多少,主要受到G1回收的效率和用户设置的软实时目标有关。每一次的回收,G1会选择可能回收最多垃圾的Region进行回收。与此同时,G1回收器会维护一个空间Region的链表。每次回收之后的Region都会被加入到这个链表中。

每一次都只有一个Region处于被分配的状态中,被称为current region。在多线程的情况下,这会带来并发的问题。G1回收器采用和CMS一样的TLABs的手段。即为每一个线程分配一个Buffer,线程分配内存就在这个Buffer内分配。但是当线程耗尽了自己的Buffer之后,需要申请新的Buffer。这个时候依然会带来并发的问题。G1回收器采用的是CAS(Compate And Swap)操作。

相关推荐

  1. 面试知识汇总——垃圾回收G1垃圾回收

    2024-03-30 10:42:04       36 阅读
  2. JVM-GC-G1垃圾回收

    2024-03-30 10:42:04       24 阅读
  3. 垃圾回收CMS和G1的区别

    2024-03-30 10:42:04       63 阅读
  4. JVM G1垃圾回收的工作内容

    2024-03-30 10:42:04       41 阅读
  5. 深入解析JVM G1 垃圾回收

    2024-03-30 10:42:04       33 阅读
  6. G1 垃圾回收解决的问题

    2024-03-30 10:42:04       32 阅读
  7. jvm垃圾回收

    2024-03-30 10:42:04       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-30 10:42:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 10:42:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 10:42:04       87 阅读
  4. Python语言-面向对象

    2024-03-30 10:42:04       96 阅读

热门阅读

  1. springMVC

    springMVC

    2024-03-30 10:42:04      40 阅读
  2. Redission快速入门

    2024-03-30 10:42:04       41 阅读
  3. 001-从零学习设计模式-设计原则

    2024-03-30 10:42:04       37 阅读
  4. Redis的数据类型List使用场景实战

    2024-03-30 10:42:04       37 阅读
  5. 如何使用 RabbitMQ 进行消息的发送和接收

    2024-03-30 10:42:04       46 阅读
  6. 查验身份证

    2024-03-30 10:42:04       41 阅读
  7. 如何使用 WebView 将 React Native 嵌入到原生应用中

    2024-03-30 10:42:04       40 阅读
  8. HTTPS

    HTTPS

    2024-03-30 10:42:04      44 阅读
  9. 当构造器参数较多时考虑用生成器

    2024-03-30 10:42:04       40 阅读
  10. 复习拓扑排序

    2024-03-30 10:42:04       44 阅读
  11. Redis 过期删除策略

    2024-03-30 10:42:04       37 阅读