如果 JVM 在执行 GC 时不断移动对象,它如何解析引用?
我正在阅读有关JVM调优的书籍,我突然想到JVM在进行GC时会不断移动对象。但是Java对象具有相互引用,人们会假设这些引用是作为指针实现的,但是JVM不可能在每次移动对象后都遍历整个堆,并更新所有引用;当然,这需要永远。那么,如果引用没有改变,但对象的物理位置却发生了变化,它是如何解析引用的呢?
我读过很多关于JVM的文章,但这从未在任何地方得到解释,甚至没有暗示过。
[编辑]我的观点是,引用是单向的。从指针到指向点是“即时的”,但相反,需要进行完整的堆扫描。虽然这是可能的,但似乎不太可能。如果 10K 对象在次要集合中幸存下来,那么执行 10K 次完整堆扫描 10K 次来更新对这些对象的引用需要多长时间?必须使用某种优化的算法或结构。