当前位置: 首页 > 知识库问答 >
问题:

java - 关于G1的几点疑惑?

殷永嘉
2023-08-22
  1. young gc是不是针对所有的新生代region进行回收?我的理解是young gc会回收全部的新生代Region,并调整Eden区数量来满足软实时性要求;
  2. Oracle文档中指出在并发标记期间还可能进行额外的young gc,这不会破坏并发标记期间的内存布局么?比如现在正在进行并发标记,对于某个Eden Region A, 还未完成标记,此时若是发生young gc,A会被如何处理?
  3. 以及这位仁兄提出的关于Mixed GC的执行次数问题, mixed gc如何利用concurrent marking phase获得的CSet,每次仅回收一部分CSet中的老年代?下次mixed gc再回收一部分直到满足mixed gc退出条件?

共有2个答案

柳修平
2023-08-22
  1. 是的,年轻代垃圾回收只会回收Eden区Survivor区
  2. 不会,会进行再次标记(Remark)修正上一次的标记结果
  3. 默认8次,混合回收并不一定要进行8次。有一个阈值-XX:G1HeapWastePercent,默认值为10%,意思是允许整个堆内存中有10%的空间被浪费,意味着如果发现可以回收的垃圾占堆内存的比例低于10%,则不再进行混合回收。因为GC会花费很多的时间但是回收到的内存却很少。
焦信鸥
2023-08-22

关于第三点,mixed gc次数问题,查阅了一些文档(原文地址), 我认为问题中对 3 的理解应当是对的,即mixed gc 每次仅针对标记阶段获得的CSet一部分老年代进行回收,直到满足退出条件:

Compared to a young collection, a mixed collection will look to collect all three generations within the same pause time target. It manages this through the incremental collection of the Old regions based on the value of G1MixedGCCountTarget (defaults to 8). Meaning, it will divide the number of candidate Old regions by the G1MixedGCCountTarget and try to collect at least that many regions during each cycle. After each cycle finishes, the liveness of the Old region is re-evaluated. If the reclaimable space is still greater than the G1HeapWastePercent, mixed collections will continue.
 类似资料:
  • 关于MVP和MVVM的几点混淆 在问这个问题之前,我读了一篇关于MVP和MVVM的文章。(例如:http://martinfowler.com/eaadev/uiarchs.html) null 例如,富客户端应用程序将同时使用本地数据库和远程服务。 在业务层,有两种对象! 域对象,它是从我的本地数据库中读取的。 在MVP中,只有一个“模型层”,所以我可以在这个模型层中管理和存储domian对象和

  • 本文向大家介绍关于mysql init_connect的几个要点总结,包括了关于mysql init_connect的几个要点总结的使用技巧和注意事项,需要的朋友参考一下 init_connect的作用 init_connect通常用于:当一个连接进来时,做一些操作,比如设置autocommit为0,比如记录当前连接的ip来源和用户等信息到一个新表里,当做登陆日志信息 使用init_connect

  • 以下代码在 chrome 输出 1,2,3 这个在网上找到了,forEach 一开始就已经获取了 数组长度 The range of elements processed by forEach is set before the first call to callbackfn. Elements which are appended to the array after the call to

  • 简单来说 controller service dao 三层。 controller 和 service 之间的分层相对比较清晰, 业务逻辑和显示逻辑的拆分, 譬如 MQ/http/RPC 和业务分离。 service 和 dao 的区分我有点搞不懂。主要是因为分不清什么是存储逻辑(非业务逻辑)什么是业务逻辑。 尤其是加入了 manager 层之后。 因为是 python 后端, 所以很自然的将业

  • 本文向大家介绍关于加强MYSQL安全的几点建议,包括了关于加强MYSQL安全的几点建议的使用技巧和注意事项,需要的朋友参考一下 通常我们在连接MySQL的服务器时,要使用到口令。这个口令在网络上传输的时候是加过密的。可是其它的内容都是以明文的方式来进行传输的。 当然如果担心这个不安全的话,可以使用压缩协议(MySQL3.22和以上版本),这样可以让其它的内容不那么容易就被看到。甚至为了让它更加安全

  • 看了一些博客,说优点可以在服务器端渲染和请求数据。 不明白为什么需要在服务器端请求数据呢?假如系统首屏只是一个login画面,也不需要在服务器端请求数据呀。 如果是在服务器端请求的话为什么要用fetch?也不存在跨域了吗? Nuxt或Next中api这种命名好像是固定的,直接当成api请求吗?假如我某个组件的路由也是api的时候是不是路径冲突了? 前几年做的小系统都说前后端分离,现在为了seo做一