Sun JRE确实将Soft引用与WeakRe的处理方式不同。如果可用内存没有压力,我们会尝试保留SoftReference引用的对象。一个细节:“-clientJRE”和“-server”JRE的策略不同:-clientJRE试图通过更喜欢清除Soft引用而不是扩展堆来保持你的占用空间小,而-server JRE试图通过更喜欢扩展堆(如果可能的话)而不是清除Soft引用来保持你的性能高。一种尺寸并不适合所有人。
import java.util.WeakHashMap;
public class Test {
public static void main(String args[]) {WeakHashMap<Employee, EmployeeVal> aMap =new WeakHashMap<Employee, EmployeeVal>();
Employee emp = new Employee("Vinoth");EmployeeVal val = new EmployeeVal("Programmer");
aMap.put(emp, val);
emp = null;
System.gc();int count = 0;while (0 != aMap.size()) {++count;System.gc();}System.out.println("Took " + count+ " calls to System.gc() to result in weakHashMap size of : "+ aMap.size());}}