垃圾回收算法

java垃圾回收机制:

java的一大优点,就是引入了垃圾回收机制,避免了程序员需要对每个对象进行手动的垃圾回收,但是也会造成一个小麻烦,就是不能自主的进行垃圾回收(虽然System.gc()可以启动垃圾回收,但是由于java语言规范,不一定会执行)。

常用的垃圾回收算法:

1.标记-清除,直接将需要清除的垃圾进行标记,当内存不足时,对标记过的垃圾进行回收。优点:对象不需要移动;缺点:清除效率低,而且会产生大量不连续的内存碎片,如果此时大对象进入,会由于内存不足,而导致触发多次GC

2.标记-复制,将整个内存划分为两个区域,只使用一个区域进行存储对象,当内存不足时,将要保存的对象,复制到另一个区域中,再对之前的区域进行GC。优点:按顺序分配内存即可,实现简单;缺点:可用内存变为原来的一半,对象存活率高的话,就会频繁的进行复制。

3.标记-压缩,将需要回收的对象标记后,将所有存活的对象全部挤压到内存到一端去,再对剩余的内存空间进行GC。优点:解决了清除算法的内存碎片问题,但是需要对象的移动,一定程度上降低了效率。

4.分代收集算法,更加对象的存货周期,将内存划分为年轻代,老年代,永久代。一般再年轻代中执行标记复制算法,在老年代中执行标记压缩算法。

常见的垃圾回收器:年轻代:serial,parnew,parallel scavenge 老年代:serial old,parallel old,cms 全局收集:g1 注意:serial表示串行收集,直接执行stw,单一执行垃圾回收;而parallel表示并行,执行stw,多线程执行垃圾回收,cms和g1是并发,系统和垃圾回收同时执行,系统不会暂停

jdk8中使用的垃圾回收器是parallel scavenge和parallel old;而jdk11中使用的是g1;
垃圾回收内存分配:一般分为年轻代和老年代,内存占比1:2;而在年轻代中,还分为Eden(伊甸区)和to survivor区和from survivor区,占比为8:1:1
垃圾回收原理:当对象进入回收时,先进入Eden区,如果对象过大,在Eden区中没有足够内存存储时,触发GC,Eden区和to survior的存活对象就被复制到from survivor区中去,然后进行gc,(如果内存过大,直接进入年老代),在这个过程中to和form会不断进行变化,并且由于对象的对象头信息中会记录GC年龄分带,但年龄大于15后(是由于对象头信息中记录会有四个bit位来表示年龄,而4个bit位最大值就是15,所以一般默认是15,可以设置),对象就会从年轻代转移到年老代。

相关文章

图解Java垃圾回收机制,写得非常好

什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用...

Java的垃圾回收(Garbage Collection)机制

(原文2006年发在CSDN上,ID是beepbug。因为是发表在CSDN上,内容可能有点偏深奥。如果有不明白处,可以在评论区提出,或私信我。)一.谁在做Garbage Collection? 一种流...

JVM内存清洁工:垃圾回收算法如何让Java程序跑得更快更稳?

在Java的世界里,程序运行时的内存就像一间不断产生垃圾的房间。如果没有“清洁工”及时清理,垃圾堆积会导致房间无法容纳新物品,最终程序崩溃。而JVM的垃圾回收(GC)机制,正是这位隐形的“扫地僧”,默...

「Java入门」十五 垃圾回收机制

今天来自Java300课程的垃圾回收机制,有视频详解在这里,点击「链接」就可以看到了哦,有需要配套视频资料的小伙伴也可以点击「链接」哦。垃圾回收机制(Garbage Collection)Java引入...

Java虚拟机中的垃圾回收算法:那些让你的内存“焕然一新”的秘密

Java虚拟机中的垃圾回收算法:那些让你的内存“焕然一新”的秘密在Java的世界里,Java虚拟机(JVM)就像一个精明的管家,它不仅管理着我们的代码执行,还负责清理内存中不再需要的对象,这就是我们所...

JVM03——四种垃圾回收算法,你都了解了哪几种

在之前的文章中,已经为各位带来了JVM的内存结构与堆内存的相关介绍,今天将为为各位详解JVM垃圾回收与算法。关注我的公众号「Java面典」了解更多 Java 相关知识点。如何确定垃圾想要回收垃圾,必须...