JDK6.0学习笔记(二)垃圾收集机制-对象引用的类型
2008-11-15 22:23
302 查看
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.util.Set;
import java.util.HashSet;
/**
* 对象引用的类型
* 弱引用和虚引用被 System.gc();回收,强引用对象,除非显示的置为 a=null;
* 否则不会被立刻回收
*/
public class TestReferences {
public static void main(String[] args) {
int length = 10;
// 创建length个MyObject对象的强引用
Set<MyObject> a = new HashSet<MyObject>();
for (int i = 0; i < length; i++) {
MyObject ref = new MyObject("Hard_" + i);
System.out.println("创建强引用:" + ref);
a.add(ref);
}
// a=null;
System.gc();
// 创建length个MyObject对象的软引用
Set<SoftReference<MyObject>> sa = new HashSet<SoftReference<MyObject>>();
for (int i = 0; i < length; i++) {
SoftReference<MyObject> ref = new SoftReference<MyObject>(
new MyObject("Soft_" + i));
System.out.println("创建软引用:" + ref.get());
sa.add(ref);
}
System.gc();
// 创建length个MyObject对象的弱引用
Set<WeakReference<MyObject>> wa = new HashSet<WeakReference<MyObject>>();
for (int i = 0; i < length; i++) {
WeakReference<MyObject> ref = new WeakReference<MyObject>(
new MyObject("Weak_" + i));
System.out.println("创建弱引用:" + ref.get());
wa.add(ref);
}
System.gc();
// 创建length个MyObject对象的虚引用
ReferenceQueue<MyObject> rq = new ReferenceQueue<MyObject>();
Set<PhantomReference<MyObject>> pa = new HashSet<PhantomReference<MyObject>>();
for (int i = 0; i < length; i++) {
PhantomReference<MyObject> ref = new PhantomReference<MyObject>(
new MyObject("Phantom_" + i), rq);
System.out.println("创建虚引用:" + ref.get());
pa.add(ref);
}
System.gc();
}
}
class MyObject {
private String id;
public MyObject(String id) {
this.id = id;
}
public String toString() {
return id;
}
public void finalize() {
System.out.println("回收对象:" + id);
}
}
import java.lang.ref.WeakReference;
import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.util.Set;
import java.util.HashSet;
/**
* 对象引用的类型
* 弱引用和虚引用被 System.gc();回收,强引用对象,除非显示的置为 a=null;
* 否则不会被立刻回收
*/
public class TestReferences {
public static void main(String[] args) {
int length = 10;
// 创建length个MyObject对象的强引用
Set<MyObject> a = new HashSet<MyObject>();
for (int i = 0; i < length; i++) {
MyObject ref = new MyObject("Hard_" + i);
System.out.println("创建强引用:" + ref);
a.add(ref);
}
// a=null;
System.gc();
// 创建length个MyObject对象的软引用
Set<SoftReference<MyObject>> sa = new HashSet<SoftReference<MyObject>>();
for (int i = 0; i < length; i++) {
SoftReference<MyObject> ref = new SoftReference<MyObject>(
new MyObject("Soft_" + i));
System.out.println("创建软引用:" + ref.get());
sa.add(ref);
}
System.gc();
// 创建length个MyObject对象的弱引用
Set<WeakReference<MyObject>> wa = new HashSet<WeakReference<MyObject>>();
for (int i = 0; i < length; i++) {
WeakReference<MyObject> ref = new WeakReference<MyObject>(
new MyObject("Weak_" + i));
System.out.println("创建弱引用:" + ref.get());
wa.add(ref);
}
System.gc();
// 创建length个MyObject对象的虚引用
ReferenceQueue<MyObject> rq = new ReferenceQueue<MyObject>();
Set<PhantomReference<MyObject>> pa = new HashSet<PhantomReference<MyObject>>();
for (int i = 0; i < length; i++) {
PhantomReference<MyObject> ref = new PhantomReference<MyObject>(
new MyObject("Phantom_" + i), rq);
System.out.println("创建虚引用:" + ref.get());
pa.add(ref);
}
System.gc();
}
}
class MyObject {
private String id;
public MyObject(String id) {
this.id = id;
}
public String toString() {
return id;
}
public void finalize() {
System.out.println("回收对象:" + id);
}
}
相关文章推荐
- 垃圾收集器-GC以及判断对象存活的算法以及引用类型
- 垃圾回收机制与引用类型
- 第三章 JVM内存回收区域+对象存活的判断+引用类型+垃圾回收线程
- 垃圾回收:引用计数与分代收集机制
- 垃圾回收机制与引用类型
- 看Java中对象引用如何严重影响垃圾收集器(2)
- php引用计数器进行垃圾收集机制介绍
- 对象引用是怎样严重影响垃圾收集器的
- 对象引用JAVA 各种reference和垃圾回收机制
- Java垃圾回收机制与引用类型
- Java深度历险(四)——Java垃圾回收机制与引用类型
- 对象引用是怎样严重影响垃圾收集器的
- 关注性能: 引用对象(对象引用是怎样严重影响垃圾收集器的)
- 对象引用是怎样严重影响垃圾收集器
- Java垃圾回收机制与引用类型
- Java深度历险(四)——Java垃圾回收机制与引用类型
- 垃圾回收机制中,引入计数是如何实现的,内部原理是什么,怎么维持对象引用的
- JVM内存回收区域+对象存活的判断+引用类型+垃圾回收线程
- Java深度历险(四)——Java垃圾回收机制与引用类型
- Java垃圾回收机制与引用类型