`

强引用,弱引用和软引用

    博客分类:
  • java
阅读更多

1.new对象是我们经常使用的,可能我们很少在乎new出来的对象在内存中的占用问题,因为java给我们一个美丽的谎言--------内存自动回收。但作为一名真正的开发者,我们应该尽量使开发出来的程序更高效,可以更充分利用有限的内存,更快地释放那些无用java对象所占用的内存,避免java程序的内存泄漏。   1)强引用

        这是java程序中最常见的引用方式,程序创建一个对象,并把对象赋给一个引用变量,这个引用就是强引用。

public class StatusTranfer {
	public static void test(){
		String a = new String("java");
		a = new String("java2");
	}
	
	public static void main(String[] args) {
		test();
	}
}

   2)软引用

   

import java.lang.ref.SoftReference;

/**
 * 软引用:当系统内存足够时,它不会被系统回收,当系统内存不足时,会被系统回收
 * @author Administrator
 *
 */
public class SoftReferrenceTest {
	public static void main(String[] args) {
		//实例软引用
		SoftReference<Person>[] people = new SoftReference[100];
		for(int i 	= 0; i < people.length; i++){
			//通过软引用实例初始化对象
			people[i] = new SoftReference<Person>(new Person("名字" + i, i));
		}
		
		System.out.println(people[2].get());
		System.out.println(people[4].get());
		System.gc();
		System.runFinalization();
		
		System.out.println(people[2].get());
		System.out.println(people[4].get());
	}
}

class Person{
	String name;
	int age;
	public Person(String name, int age){
		this.name = name;
		this.age = age;
	}
	
	public String toString(){
		return "person[name=" + name + ", age=" + age + "]";
	}
}

    3)弱引用

import java.lang.ref.WeakReference;

/**
 * 弱引用:当系统回收时,被回收
 * @author Administrator
 *
 */
public class WeakReferrenceTest {
	public static void main(String[] args) {
		WeakReference<Person1>[] people = new WeakReference[100];
		for(int i 	= 0; i < people.length; i++){
			people[i] = new WeakReference<Person1>(new Person1("名字" + i, i));
		}
		
		System.out.println(people[2].get());
		System.out.println(people[4].get());
		System.gc();
		System.runFinalization();
		
		System.out.println(people[2].get());
		System.out.println(people[4].get());
	}
}

class Person1{
	String name;
	int age;
	public Person1(String name, int age){
		this.name = name;
		this.age = age;
	}
	
	public String toString(){
		return "person[name=" + name + ", age=" + age + "]";
	}
}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics