java内存对象更新,Java VM是否在内存中移动对象,如果是 – 如何?

参考上面关于步行堆的评论.

不同的GC做不同的方式.

通常在收集器行走堆时,他们不会在堆中走走所有对象.而是他们走在堆中的LIVE对象.这意味着如果从“根”对象可以访问该对象,则该对象是活的.

所以,在这个阶段,不得不接触所有的活动对象,因为它们将它们从旧堆中复制到新堆中.一旦活动对象的副本完成,旧堆中保留的所有对象都是已经被复制的对象或垃圾.在那时,旧堆可以完全丢弃.

这种收集器的两个主要优点是它在复制阶段压缩堆,并且它只复制活物.这对许多系统来说很重要,因为使用这种收集器,对象分配是污垢便宜,字面上只是增加一个堆指针.当GC发生时,没有一个“死”对象被复制,所以它们不会减慢收集器的速度.事实证明,在动态系统中,有比垃圾长的垃圾还有更多的少量临时垃圾.

另外,通过走动直播对象图,您可以看到GC如何“知道”每个对象,并跟踪它们在复制期间执行的任何地址调整目的.

这不是关于GC机制的论坛,因为它是一个非常平凡的问题,但这是复制收藏工作原理的基础知识.

世代复制GC将把“老”的对象放在不同的堆中,而这些对象最终被收集得比“较新的”堆少.理论认为,长期持久的对象被提升到老一辈,越来越少的收集,提高了整体的GC性能.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值