2021-03-17

关于Java垃圾收集器的概述(一)

垃圾收集器的概述(一)

Java堆是垃圾收集器管理的主要区域(堆空间有限,对象数据的创建和释放都需要在堆中进行),所以很多时候被称为"GC"堆。一个好的程序会有优质的效率,效率高低离不开资源的释放回收。垃圾回收器是回收内存的机制。垃圾回收器背后是由一整套的收集算法支持。

垃圾回收算法:1.标记—清除算法 2.复制算法 3.标记—整理算法 4.分袋收集算法

标记—清除算法

首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。(如何实现标记:在标记阶段从根对象开始遍历,对从根对象可以访问到的对象都打上标记,将其视为可达对象,在清理的阶段,又开始进行遍历,如果发现某个对象没有标记为可达对象,则将其回收)此方法的不足就是效率比较低,每次去执行就会要遍历内存导致效率低,在标记清除后,空间内会有大量不连续的内存碎片,内存碎片太多,直接导致之后程序运行过程中需要分配较大对象时找不到足够大的内存而不得不提前再次触发一次垃圾回收。

复制算法

他是将可用内存按照容量大小分文两块大小相等的两块,每次只是使用其中的一块,当某块的内存使用完了,就把还存活的对象移动到另一块内存上,再将当前内存清理掉。此算法能有效解决内存碎片化问题,实现简单高效,但是需要将原来可用的内存减小一半。

标记—整理算法

此方法的标记过程与标记清理算法一样,但是后续步骤不是直接将可回收的对象进行清理,而是将所有的存活对象整理到一边,然后直接清理边界之外的内存。此方法可以避免内存的不连续。

分袋收集算法

当前商业虚拟机的垃圾收集都是采用分代收集,他是根据对象存活周期的不同将内存分为几块,一般是把堆分为新生代和老年代,永久代(方法区)。在新生代中采用复制算法回收内存,老年代采用标记的形式回收。算法在运行的过程中优先收集处于新生代的对象,如果一个对象经过多次收集还存活,就将此对象移到更高级的堆里,减少对其扫描的次数。

Minor GC和Full GC的区别

Minor GC:又称新生代GC,指发生在新生代的垃圾收集动作;因为Java对象大多是朝生夕灭,所以Minor GC非常频繁,一般回收速度也比较快;

 

Full GC:又称为Major GC或老年代GC,指发生在老年代的GC;出现Full GC经常会伴随至少一次的Minor GC(不是绝对,Parallel Scavenge收集器就可以选择设置Major GC策略);Major GC速度一般比Minor GC慢10倍以上。

 









原文转载:http://www.shaoqun.com/a/632731.html

跨境电商:https://www.ikjzd.com/

电霸:https://www.ikjzd.com/w/2597

aca:https://www.ikjzd.com/w/1371


垃圾收集器的概述(一)Java堆是垃圾收集器管理的主要区域(堆空间有限,对象数据的创建和释放都需要在堆中进行),所以很多时候被称为"GC"堆。一个好的程序会有优质的效率,效率高低离不开资源的释放回收。垃圾回收器是回收内存的机制。垃圾回收器背后是由一整套的收集算法支持。垃圾回收算法:1.标记—清除算法2.复制算法3.标记—整理算法4.分袋收集算法标记—清除算法首先标记出所有需要回收的对象,在标记完成
旺店通:https://www.ikjzd.com/w/2390
usps国际快递查询:https://www.ikjzd.com/w/513
bonanza:https://www.ikjzd.com/w/275.html
7月29日起实行:预进港计划须进行网上申报!:https://www.ikjzd.com/home/101364
亚马逊新手卖家100问(8):https://www.ikjzd.com/home/113956
多账号运营防关联技巧大全:https://www.ikjzd.com/home/126397

No comments:

Post a Comment