当前位置: 首页 > 后端技术 > Java

JVMG1

时间:2023-04-01 19:35:27 Java

的理解NOTICE:本文仅记录我对JVMG1的一点理解,并没有详细记录每一点。如果有错误,可以指出内存区域G1将堆划分为region,大小由G1HeapRegionSize指定。humongousareaof??objectshumongousareaof??objectshumongousareaof??sizeislessthanhalfofthenormalrefioncapacity存储大型对象,并根据功能将其分为新旧代。老年代(humongous只能在老年代)。一个内存集,内存集是其他区域对象指向这个区域的引用。预写屏障,处理SATB,将修改前的引用对象放入SATB队列。Post-writebarrier,将被修改对象所在的卡表标记为dirtycard垃圾回收回收是基于维护每个region的垃圾值(回收获得的空间大小与所需时间的比值),并通过最大GC时间(-XX:MaxGCPauseMillis)对高值区域进行优先回收分类YoungGCMixedGC(在老年代内存占比超过IHOP)回收步骤InitialmarkmarkGCRoot直接关联对象生成原始快照修改TAMS的值需要停止世界并发标记从GCRoot开始进行可达性分析处理SATB记录的引用更改对象最终标记在并发阶段留下的少量SATB记录被过滤回收计算每个区域的回收价值。回收将回收区域中的存活对象移动到空区域并清除原始区域。在标记过程中处理问题。在并发标记中,通过TAMS生成新对象并将其划分到特定区域。TAMS区域只能放置物件,默认为黑色。在并发标记中执行可达性分析。处理具有引用更改的对象。使用SATB记录灰色到白色。Deletedreferencesrootedinthefinalmarkgreyobjects,andrescanonce概念解释三色标记方式黑色表示对象被访问过,引用被扫描过,最后确认存活,GCRoot默认为黑色和灰色表示对象已经被访问过,有一个引用没有被扫描过,不判断是否存活。白色表示未被访问的对象被处理为并发标记中的对象引用变化。SATB的全称是SnapshotAtTheBeginningRegion,包含5个指针bottompreviousTAMSnextTAMStopend函数处理并发标记,新创建的对象在nextTAMS->top之间,这个区间默认为黑色,存活的灰色对象默认删除指向白色的引用,记录下来,并以记录的灰色为根,并重新扫描增量更新黑色插入对白色的新引用,并记录它。并发扫描结束后,以记录的黑色为根,重新扫描一遍。参考https://blog.51cto.com/u_1507...