美文网首页Java大数据技术专题程序员
Java 垃圾回收01(基本过程)

Java 垃圾回收01(基本过程)

作者: 皮皮卡卡丘 | 来源:发表于2018-12-25 08:46 被阅读76次

        支持Java语言的运行时系统,具有自动管理内存的功能,从而化解了C/C++程序员特别苦恼的内存管理问题,而自动化内存管理的核心便是自动垃圾回收。

    什么是自动垃圾回收?

        自动垃圾回收是一种清理堆内存中无用对象的机制。该机制能够找出堆内存中哪些对象正在被使用,哪些对象不会被使用,并将后者进行删除。所谓正在被使用的对象指的是尚有引用的对象,即是说程序执行到目前为止,仍然有指针指向该对象。而未被使用的对象,是指从当前开始,将不会再有任何指针指向该对象,因此该对象占用的内存需要被回收利用。

        在使用不支持自动垃圾回收的程序语言时(例如:C和C++),程序员需要手动申请和释放内存。而支持自动垃圾回收语言的运行时系统,一般会有垃圾回收器,以代替程序员进行内存管理。本文接下来将阐述自动垃圾回收机制的基本过程。

    第一步:标记

        自动垃圾回收的第一步是标记出当前堆内存中哪些对象正在被使用,哪些将不会再被使用。并分别进行标记,如下图中所示,其中蓝色部分表示正在被使用的对象,橙色表示不再被使用的对象。垃圾回收器需要进行扫描检查才能知道对象的使用情况,而如果每次都对系统中所有对象进行检查,将会消耗大量时间。

    第二步:清除

        这一步会将对标记出的不再被使用的对象进行删除,同时内存分配器会接管可用内存,以供分配新对象时使用。删除后的示意图,如下图所示。

    第二步:压缩

        为了进一步提升性能,在删除掉未被使用的对象后,还需要将剩下的正在被使用的对象移动到一起(压缩),这样就可以更简单快捷地分配新对象了。压缩后的示意图,如下图所示。

    相关文章

      网友评论

        本文标题:Java 垃圾回收01(基本过程)

        本文链接:https://www.haomeiwen.com/subject/jekokqtx.html