?????????????????????????ù???

????<1> ????????????д?????????????????????????

????<2> ??????????????????????????????? myObject = null??

????<3> ??????ù?????в?Ρ?

????<4> ????????????????????е??????

??????2????y??

?????????????y?Σ?????????????????

????<1> ????????????????????????Strong Reference????

????<2> ???ж????????????????????????????????????????????????Soft Reference???????????Weak Reference???????????Phantom Reference??????

??????????Strong Reference???????JVM??????????????ü?????????????????е???????·????????????????????·????????????????????????????????????????á?

???????????Soft Reference????????????????????н???????ù??????е???治??????????????????棬???????????????????????????????Щ?????????????Java???OutOfMemory?????????????null????????????????Щ???????????棬???Cache?????????????????????????????OutOfMemory??

???????????????????????

import java.lang.ref.SoftReference;
...
A a = new A();
...
// ???a
...
// ???????a?? ?????????soft?????????????????????
SoftReference sr = new SoftReference(a);
a = null;
...
// ?′?????
if (sr != null) {
a = sr.get();
} else {
// GC???????棬?????a???????????????
a = new A();
sr = new SoftReference(a);
}

?????????ü??????????Java???????????????棬?????????????????????????????????????????Щ??????????????????????????ò???????????????????ü????????????????

???????????Weak Reference???????????????????????????????GC?????????????????????????????????Soft????????????Weak?????GC??????л????Weak???????????????????GC?????Weak?????????????Map???С?

import java.lang.ref.WeakReference;  
                              ...  
                                 
                             A a = new A();  
                             ...  
 
                               // ???a  
                              ...  
                                  
                               // ???????a?? ?????????Weak?????????????????????  
                               WeakReference wr = new WeakReference(a);  
                               a = null;  
                             ...  
                              // ?′?????  
               if (wr != null) {  
                    a = wr.get();  
            } else {  
                                   a = new A();  
                wr = new WeakReference(a);  
            }