标签:占用 循环 通用 col 对象 image 分代 str lis
来源:http://www.sxt.cn/Java_jQuery_in_action/The_garbage_collection_mechanism.html
对象空间的释放:将对象赋值null
即可。垃圾回收器将负责回收所有”不可达”对象的内存空间。
堆中每个对象都有一个引用计数。被引用一次,计数加1. 被引用变量值变为null,则计数减1,直到计数为0,则表示变成无用对象。优点是算法简单,缺点是“循环引用的无用对象”无法别识别。
例如:s1和s2互相引用对方,导致他们引用计数不为0,但是实际已经无用,但无法被识别。
public class Student {
String name;
Student friend;
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
s1.friend = s2;
s2.friend = s1;
s1 = null;
s2 = null;
}
}
程序把所有的引用关系看作一张图,从一个节点GC ROOT开始,寻找对应的引用节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕之后,剩余的节点则被认为是没有被引用到的节点,即无用的节点。
分代垃圾回收机制,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的回收算法,以便提高回收效率。我们将对象分为三种状态:年轻代、年老代、持久代。JVM将堆内存划分为 Eden、Survivor 和 Tenured/Old 空间。
Minor GC
,每次 Minor GC 会清理年轻代的内存,算法采用效率较高的复制算法,频繁的操作,但是会浪费内存空间。当“年轻代”区域存放满对象后,就将对象存放到年老代区域。Major GC
和Full GC
(全量回收),来一次大扫除,全面清理年轻代区域和年老代区域。Minor GC
Major GC
:Full GC
:在对JVM调优的过程中,很大一部分工作就是对于Full GC的调节。有如下原因可能导致Full GC:
System.gc()
被显式调用(程序建议GC启动,不是调用GC)标签:占用 循环 通用 col 对象 image 分代 str lis
原文地址:https://www.cnblogs.com/ziyue7575/p/10417907.html