JVM 常用垃圾回收算法

2017-07-09 From 程序之心 By 丁仪

Java 虚拟机提供了垃圾回收功能,把程序员从内存管理的工作中解放出来,一定程度上提高了程序开发效率,降低了内存溢出发生的概率。垃圾回收涉及到很多算法的细节,并且不同的虚拟机实现会有细节上的差异,本文仅整理描述几种常用算法的思想。

标记-清除算法

标记-清除算法分为两个阶段:标记、清除。在标记阶段,扫描并标记所有需要回收的对象;在清除阶段,统一回收被标记的对象。这个算法的效率并不高,并且清除对象后会产生大量不连续的内存碎片。

复制算法

复制算法把内存分为两部分,两部分大小相同,每次只使用其中一个。一块内存用完后,把活着的对象复制到另一块内存,当前内存块全部回收。这个算法不会产生内存碎片,但是可用内存明显变少。

标记-整理算法

标记-整理算法与标记-清除算法类似,不同的是,不会直接对垃圾对象进行回收,而是把所有存活的对象都移动到一端,然后清理掉其他部分。

分代收集算法

分代收集算法根据对象的生命周期把内存划分为新生代和老年代,根据各自的特点选择合适的垃圾回收算法。对于新生代,大部分对象存活时间都很短,每次只有少量存活,可以选择复制算法,只需要复制少量对象就可以完成收集。对于老年代,对象存活时间长,可以选择标记-清除算法或标记-整理算法 。分代收集算法是目前商用虚拟机的主要回收算法。

创建新对象一般分配在新生代,而占用大量连续内存的字符串和大型数组则会分配在老年代。这是为了避免回收老年代时复制太多内存,降低效率。

虚拟机给每个对象定义了一个年龄计数器。第一次创建对象时直接分配在新生代,以后每经过一次垃圾回收年龄加一,年龄到达阈值后便会被移动到老年代。

本文来源:程序之心,转载请注明出处!

君子曰:学不可以已。
《计算机科学导论(原书第4版)》

本书是国际知名的高等学校计算机科学及相关专业基础课教材,也是非常受欢迎的计算机入门读物。该教材是一本百科全书式的计算机专业入门指南,涉及计算机科学的方方面面。虽然读者对象是计算机专业的学生,但这本书深入浅出、引人入胜,勾画出了计算机科学体系的框架,可以为有志于IT行业的学生奠定计算机科学知识的基础,架设进一步深入专业理论学习的桥梁。

发表感想

© 2016 - 2024 chengxuzhixin.com All Rights Reserved.

浙ICP备2021034854号-1    浙公网安备 33011002016107号