-垃圾回收管理机制
1)什么是垃圾回收管理机制(GC)
1.1)什么是垃圾
程序中使用过的,并且之后的程序,不会再使用的对象或资源
1.2)什么是垃圾回收
如果放任垃圾回收不管,会逐渐占满内存,造成内存溢出,内存泄漏问题
回收垃圾,就是将不使用的资源或对象释放掉的操作
1.3)垃圾回收管理机制
就是JVM中自带的一个回收垃圾的线程(程序)
2)其他语言是如何回收垃圾的
c++:没有垃圾回收机制,程序员要编写代码来释放对象或资源占用的内存,通过析构函数,来释放内存
3)垃圾回收机制的优点和不足
优点:java程序员,不需要考虑垃圾回收问题
缺点:
1、垃圾回收管理机制本身是占用内存的
2、垃圾回收的时机并不是立即的
3、垃圾回收机制,只能回收java程序中产生的垃圾,在其他媒介中产生的垃圾,要手动回收
4)垃圾的判定和原理
- 判断一个对象或资源是垃圾的规则有很多
- 多种规则之一:引用计数法
内存中保存每个对象被引用的个数,如果这个个数为0;那么即视为垃圾
-
如何标记一个对象为垃圾
<引用> = null
public void asd(){
Dog d = new Dog();//标记d为垃圾
//将的对象的引用减少为0;
d = null; //刚实例化的狗对象,变为垃圾
}
5)finalize 方法
- finalize是Object类中编写的一个方法,不是关键字
- 这个方法会被垃圾回收管理机制,在回收这个对象前调用
6)System.gc();
- GC的回收对程序员来说是透明的,并不一定一发现有无引用的对象,就立刻回收。
- 一般情况下,当我们需要GC线程即可回收无用对象时,可以调用System.gc()方法
- System.gc()用于建议虚拟机马上调度GC线程回收资源,具体的实现策略取决于不同的JVM系统
public class Aoo {
public static void main(String[] args) {
Dog d = new Dog();
System.out.println("123");
d = null;
System.gc();
System.out.println("456");
// 输出: 123
// 狗对象被回收了
// 456
}
}
class Dog{
public void finalize(){
System.out.println("狗对象被回收了");
}
}