栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java VM是否会在内存中移动对象?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java VM是否会在内存中移动对象?

参考上面关于遍历堆的注释。

不同的GC采取不同的方式。

通常,在遍历堆时复制收集器,但它们不会遍历堆中的所有对象。相反,它们将实况对象放在堆中。含义是,如果可以从“根”对象访问该对象,则该对象是活动的。

因此,在此阶段无论如何都要触摸所有活动对象,因为它会将它们从旧堆复制到新堆。一旦完成活动对象的复制,旧堆中剩下的全部就是已经复制的对象或垃圾。到那时,旧堆可以被完全丢弃。

这种收集器的两个主要好处是,它在复制阶段压缩了堆,并且仅复制了活动对象。这对于许多系统而言很重要,因为使用这种收集器,对象分配非常便宜,实际上只不过是增加堆指针而已。当发生GC时,不会复制任何“死”对象,因此它们不会降低收集器的速度。事实证明,在动态系统中,临时垃圾比长期存在的垃圾要多得多。

此外,通过遍历活动对象图,您可以看到GC如何“了解”每个对象,并跟踪它们,以便在复制期间执行任何地址调整用途。

这不是一个讨论GC机理的论坛,因为这不是一个小问题,但这是复制收集器工作原理的基础。

世代复制的GC将把“较旧”的对象放在不同的堆中,与“较新”的堆相比,最终收集这些对象的频率降低了。从理论上讲,持久耐用的物体会被提升到较老的世代,并且越来越少地被收集,从而提高了整体GC的性能。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610070.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号