性能问答>怎么找到内存对象?>
1回复

怎么找到内存对象?



在没有使用句柄的情况下,存活的内存对象在gc之后,被移动了位置,引用对象怎么找到内存对象?
在复制算法和标记整理算法中都有将存活的内存对象引动位置的情形,但是整理位置之后,引用对象岂不是找不到内存对象了吗?

2515 阅读
请先登录,再评论

既然是存活下来的对象,你应该也知道这个对象是经过GCRoot找到的对象。通过计算出压缩后每个实例对应的新地址,找出所有GC的根结点,将他们放到队列里,然后依次遍历所有的根结点以及引用的所有的子节点,将所有被遍历到的节点中引用地址进行更新,然后根据计算得到的新地址对每个实例变量进行更新。

1年前