Java核心机制之GC篇

一、Java垃圾回收机制是什么?  

        java垃圾回收机制是java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象所占据的内存空间的一种机制。

二、如何判断哪些对象是垃圾呢?

1.引用计数法

        为每一个创建的对象分配一个引用计数器,用来存储对象被引用的个数。个数为零,即没有人使用这个对象,每当有一个地方去引用它时,引用计数器就加一。一旦对象的引用计数为零,该对象立即被回收,对象占用的内存空间将被释放。但此方法无法检测“循环引用”,即两个对象互相引用。

2.可达性分析

        将所有引用的对象想象成一棵树,根结点为GC Roots,从根结点出发,能遍历到的对象就是“可达”对象,即“存活着”的对象,不能到达的就是要被回收的对象。

三、垃圾回收方式有哪些?

1.标记清除法

        分为标记与清除两步,首先利用可达性分析遍历内存,将“存活”对象和“垃圾”对象分别标记出来,然后就是清理掉“垃圾”对象。但此方法效率不高,且容易产生内存碎片。内存碎片即空闲的连续内存空间比要申请的空间小,导致这些小内存块不能被利用,从而产生内存碎片。

2.标记整理法

        此法在标记清除法的基础上,将“存活”对象堆放在一起,从而解决了会产生内存碎片的问题。

3.复制算法

        复制算法就是将内存等分为两部分,每次只使用其中一半,用完之后将“存活”对象直接复制到另一半上,然后一次性清除垃圾对象。此方法虽然不会产生内存碎片,但内存利用率太低。

        改进后将内存划分为8:1:1三部分(内存分区详见JVM篇),Eden区使用最大的那块内存,其余两小块给Survivor区中的From和To。每次优先使用Eden区,Eden区满了之后,将存活的对象复制到Survivor区,然后清除Eden区。当Survivor区也满了的时候,就会通过分配担保机制把对象复制到老年代中。

四、JVM堆分区中的GC(部分内容存疑)

        新生代 GC(Minor GC/Young GC):指发生在新生代的垃圾回收,Minor GC 非常频繁,回收速度一般来说也比较快。(也有更为详细的说法为Minor GC发生在Eden区,Young GC发生在Eden区、From区、To区)

        老年代 GC(Major GC/Old GC):指发生在老年代的垃圾回收,出现了 Major GC 经常会伴随至少一次的 Minor GC(并非绝对),Major GC 的速度会比 Minor GC 的速度慢。

        FullGC是清理整个堆空间,会同时对年轻代、老年代、永久代都进行垃圾回收。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值