Java中CG与GC的差异及GC详解

1.什么是GC

GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc() 或Runtime.getRuntime().gc()。



2.GC之引用计数法

JVM在进行GC时,并不是对这三个区域统一回收。大部分的时候是回收新生代。引用计数算法是为每个对象一个计数器用来保存对象被引用的次数,如果该对象被其他对象引用,计数器加1,对该对象引用结束则计数器减1,当计数器为0时认为该对象已经没有任何引用,就会被回收。

java中cg与gc区别 java中的gc_内存碎片



3.GC之复制算法

java中cg与gc区别 java中的gc_压缩算法_02

java中cg与gc区别 java中的gc_内存空间_03

复制算法的核心就是,将原有的内存空间一分为二,每次只用其中的一块,在垃圾回收时,将正在使用的对象复制到另外一个内存空间中,然后将该内存空间清空,交换两个内存的角色,完成垃圾回收。如果内存中的垃圾对象较多,需要复制的对象就较少,这种情况下适合使用该方式并且效率比较高,反之,则不适合。优点:在垃圾对象多的情况下,效率较高。清理后,内存无碎片。缺点:在垃圾对象少的情况下,不适用,如:老年代内存。分配的2块内存空间,在同一个时刻,只能使用一般,内存使用率较低。



4.GC之标记压缩清除算法

标记清除

标记清除算法的执行过程分为两个阶段:标记阶段、清除阶段。标记阶段会通过可达性分析将不可达的对象标记出来。清除阶段会将标记阶段标记的垃圾对象清除。

java中cg与gc区别 java中的gc_内存碎片_04

两次扫描严重浪费时间,会产生内存碎片不需要额外的空间

标记压缩

标记压缩算法可以解决标记清除算法的内存碎片问题。其算法可以看作三步:标记垃圾对象清除垃圾对象内存碎片整理

java中cg与gc区别 java中的gc_java中cg与gc区别_05

标记压缩清除

先标记清除几次

java中cg与gc区别 java中的gc_内存碎片_04

再压缩


java中cg与gc区别 java中的gc_java中cg与gc区别_05



5.GC算法总结

内存效率:复制算法>标记清除算法>标记压缩算法(时间复制符)内存整齐度:复制算法=标记压缩算法>标记清除算法内存利用率:标记压缩算法=标记清除算法>复制算法 年轻代:存活率低------------复制算法老年代:区域大,存活率高 ----------标记清除(内存碎片不是太多)+标记压缩混合 实现


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空