http://blog.sina.com.cn/s/blog_6f6a95180100rrox.html
1.java内存管理分为内存分配和内存回收,都不需要程序员负责。
2.垃圾回收的机制主要是看对象是否有引用指向该对象。
3.强引用
4.软引用
public static voidmain(String[] args){
//创建软引用数组
SoftReference<Person>[] p = new SoftReference[100]; //100000
//赋值
for(int i = 0;i< p.length ;i++){
p[i] = newSoftReference<Person>(newPerson("name"+i ,i));
}
//测试
System.out.println(p[1].get());
System.out.println(p[4].get());
//通知系统进行回收
System.gc();
System.runFinalization();
System.out.println("---------------");
System.out.println(p[1].get());
System.out.println(p[4].get());
}
5.weakReference
public static void main(String[] args) {
String str = newString("JAVA讲义");
// String str = "JAVA讲义";这种创建是在常量池中
//创建一个弱引用对象 指向 str对象
WeakReference<String> wr = newWeakReference<String> (str);
str =null;
//输出
System.out.println(wr.get());//JAVA讲义
//强制垃圾回收
System.gc();
System.out.println(wr.get());//null
}
6.虚引用
public static void main(String[] args){
// 创建一个对象
String str = newString("JAVA讲义");
// 创建一个引用队列
ReferenceQueue<String> rq = newReferenceQueue<String>();
//创建一个虚引用,指定引用对象.不能单独使用必须关联引用队列
PhantomReference pr = newPhantomReference(str,rq);
//切断强引用
str =null;
//试图取得虚引用对象
System.out.println(pr.get()); //null
//垃圾回收
System.gc();
System.runFinalization();
//取出引队列中的最先进入队列的引用与pr进行比较
System.out.println(rq.poll()==pr); //true
}