1. Object 的finalize() 方法的作用是否与C++的析构函数的作用相同
1. 与C++的析构函数不同,析构函数调用时机确定,finalize() 方法是不确定的。
2. 将未被引用的对象放置于F-Queue队列。
3. 方法执行随时可能会被终止。
4. 给与对象最后一次重生的机会。
package Stack.virtulStack;
public class Finalization {
//定义一个Finalization类型的静态变量
public static Finalization finalization;
@Override
protected void finalize(){
System.out.println("Finalization");
finalization=this;
}
public static void main(String[] args) {
//创建一个Finalization对象
Finalization f=new Finalization();
System.out.println("first print "+f);
f=null;
//调用垃圾回收,会触发finalize()方法
System.gc();
System.out.println("Second print "+f);
System.out.println(f.finalization);
}
}
运行结果为:
2 java中的强引用、软引用、弱引用、虚引用有什么作用?
强引用(Strong Reference)
1 最普遍的引用: Object obj =new object();
2 当虚拟机内存对象不足时,JVM抛出OutOfMemoryRrror终止程序也不会回收具有强引用的对象。
3. 强应用可以通过将对象设置为null 来弱化引用,使其被回收。
软引用(Soft Reference)
1.对象处在有用但非必须的状态。
2.只有当内存空间不足时,GC会回收该引用的对象的内存。
3 可以实现高速缓存。
弱引用(Weak Reference)
1.非必须的对象,比软引用更弱一些。
2.GC时被回收
3 被回收的概率也不大,因为GC线程优先级比较低。
4 适用于引用偶尔被使用,并且不影响垃圾收集的对象。
虚引用(Phantom Reference)
1.不会决定对象的生命周期
2. 任何时候都可能被垃圾收集器回收
3 跟踪对象被垃圾收集器回收的活动,起到哨兵作用
4 必须和应用队列ReferenceQueue联合使用
总结: 强引用>软引用> 弱引用>虚引用
类层次结构
引用队列(Reference Queue)
1.无实际存储结构,存储逻辑依赖于内部节点之间的关系来表达。
2 存储关联且被GC引用的软引用、弱引用、虚引用。