OopMap

问题描述:2020-12-01:java中,什么是安全点和安全区域? 大家好,小编来为大家解答以下问题,oopmap是什么,一个有趣的事情,现在让我们一起来看看吧!

GC是如何是如何启动及GC中的算法等

OopMap的相关图片

Hotspot虚拟机在特定位置记录OopMap,这些位置被称为安全点(Safepoint)。

安全区域是指能够确保在某一段代码片段之中,引用关系不会发生变化,因此,在这个区域中任 意地方开始垃圾收集都是安全的。我们也可以把安全区域看作被扩展拉伸了的安全点。

的相关图片

首先,我们先看看GC处理的内存区域在hotSpot(jdk1.8用的这个虚拟机)中是如何划分的.。

虚拟机将内存划分为两大区域,新生代与老年代.。

而在新生代中

虚拟机又将区域划分为Eden和两块survivor,新创建的对象将会在占有较大区域的Eden和一块survivor,当GC处理垃圾是首先进行标记,会将剩余的存活对象复制之后放在另外survivor中,然后进行清除,清除之会.。

那么这里就有一个问题,如果存活对象过多 survivor放不下怎么办?。

这里就会使用担保:将溢出的对象放入老年代之中.。

如果是老年代那,因为老年代的对象的存活能力很强,且无法有空间为老年代进行担保,所以老年代使用的事 标记-整理 。

算法进行垃圾回收的,当GC标记清除了可回收的对象,会将剩余对象向一端移动.。

那么GC是如何一步步的进行垃圾回收的那?。

首先GC要启动可达性算法,那么GC是如何快速的找出所有的GCROOTS节点的那?。

1. hotSpot是使用OopMap这样一组数据结构进行记录的,类加载完成之后 。

会记录对象内什么偏移量是什么类型(书上的话),编译器也会记录栈和寄存机中的位置.,而这个数据会在特点的位置进行记录,这些位置就叫做安全点(safepoint).。

还有 GC的启动需要暂时挂起所有的线程,那么GC是在什么时间进行垃圾回收的那?。

1.当线程运行到safepoint的时候才会进行GC,那么GC开始之后需要挂起所有线程,这是GC会选择使用主动式的抢断,也就是说GC会设置一个和安全点重合的轮询点,让所有线程都去访问这个轮询点,如果线程访问结果为真,那么就代表线程到了轮询点,便会记性线程中断了.。

的相关图片

的相关图片

原文地址:http://www.qianchusai.com/OopMap.html

宵朗之琦-80,宵朗之琦什么意思

宵朗之琦-80,宵朗之琦什么意思

interact-30

interact-30

arduino-60

arduino-60

highest-grossing-100

highest-grossing-100

copywriter-80

copywriter-80

expansionist

expansionist

Valerie

Valerie

客户资源采集,客户资源什么意思

客户资源采集,客户资源什么意思

validity-60

validity-60

stm32f407vgt6arduino-70

stm32f407vgt6arduino-70