堆中的对象回收:
计数法:在每个对象上有一个计数器,每增加一个引用,计数器就加1,每减少一个引用计数器就减少1,当计数器为0时,这个对象可以被回收,但是存在两个对象互相引用的情况,而该对象又不能被回收掉,
所以又有了根GCroot搜索法,沿着每个对象的引用一直向上寻找,如果找到GCroot就不被删除,如果没有找到,该对象就加入了被回收的行列,可以做GCroot的有(1.当前正在执行的方法里的局部变量和输入参数2.活动线程3.内存中所有类的静态字段4.JNI引用[本地方法栈中引用的对象]),但是这种回收方法显得并不智能,对于一些无关紧要的对象,内存大的话,不用回收也无所谓,内存小的话,这些无关紧要的对象肯定想要回收它,为了更加灵活的回收这些对象,
所以把引用分为4种:1.强引用2.软引用3.弱引用4.虚引用
根据不同的引用来对可以回收的对象加以回收。
当程序员创建一个对象时,GC就开始监控这个对象的地址,大小,以及使用的情况。通过判断哪些对象是不可达的,GC就有责任回收这些内存空间,程序员可以手动执行system.gc(),通知GC运行,但是java语言规范并不保证GC一定会执行。
为什么会垃圾回收?因为java程序员在编写程序的时候不再考虑内存管理,垃圾回收可以有效的防治内存泄漏。
垃圾收集算法:
1.标记-清除算法
2.复制算法
3.标记-整理算法
4.分代收集算法
GC垃圾回收
最新推荐文章于 2025-06-04 02:02:12 发布