For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
垃圾回收机制是程序员在学习Java编程开发语言的时候需要重点掌握的一个编程开发技术,今天我们就通过案例分析来简单了解一下,Java编程垃圾回收算法与优缺点分析。
1、标记清除算法
简介
算法分为”标记“和”清除“两个阶段:先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收掉所有未被标记的对象。此操作会停止整个程序,也被称为stoptheworld。
缺点
效率不算高;
在进行GC的时候需要停止整个应用程序,导致用户体验差。
清理出的空闲内存不是连续的,产生内存碎片,需要维护一个空闲列表。
何为清除?
所谓的清除并不是真正的置空,而是把需要清理的对象地址存放在空闲的地址列表里。下次有新对象需要加载时,判断空间是否足够,足够并存放。
2、复制算法
简介
为了解决标记清除算法在垃圾收集效率方面的问题。
其主要思想便是将活着的内存分为两块,每次只使用其中一块。在垃圾收集时,将正在使用的内存中的存活对象复制到未被使用的内存中,之后清除正在使用的内存中的所有对象,交换两个内存的角色,完成回收。
优点
没有标记和清除的过程,实现简单,运行高效。
复制过去后保证空间连续性,不会出现内存碎片。
缺点
需要两倍的内存空间。
对于G1这种,复制而不移动,意味着GC需要维护region之间对象引用关系,不管是内存占用或时间开销也不小。
3、标记整理算法
简介
复制算法的高效是建立在存活对象少,垃圾对象多的前提下。新生代比较适合,但是老年代对象存活较多,所以需要用其它算法。
从根节点开始,标记所有被引用对象。
将存活对象压缩到内存的一端,按顺序排放之后,清理边界外所有的空间。
优点
消除了标记整理算法中,内存区域分散的缺点,我们需要给对象重新分配内存时,JVM只需要持有一个内存的起始地址即可。
无内存减半的高额代价。
缺点
从效率上来说,标记整理要低于复制算法。
移动对象的同时,需要调整引用的地址。
移动过程中,存在stoptheworld。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。