zoukankan      html  css  js  c++  java
  • Java中的弱引用

    Strong references

    StringBuffer buffer = new StringBuffer();

    普通的对象创建都是这种类型,只要buffer还存在,对象就不会被GC回收。同时也会造成一定的问题,比如:向HashMap添加这些对象的句柄时,保存一个图片的缓存的时候,他们都不会自动清除

    Weak references

    ReferenceQueue<String> wrq = new ReferenceQueue<String>();
    WeakReference<String> ws = new WeakReference<String>(s2, wrq);

    一个弱引用不能阻止GC回收其对象指向的内存,所有有时候通过handle.get()会返回NULL。有一个专门的WeakHashMap,不会因为键的存在,而阻止对象的回收。适合做集合的存储

    Soft references

    ReferenceQueue<String> srq = new ReferenceQueue<String>();
    SoftReference<String> ss = new SoftReference<String>(s1, srq);

    只有当内存不够的时候才会用Weak Reference的方式回收,不会导致OOM,所以适合做缓存

    Phantom references

    ReferenceQueue<String> prq = new ReferenceQueue<String>();
    PhantomReference<String> ps = new PhantomReference<String>(s3, prq);

    WeakReference是先把句柄放入Rference Queue,这些是在GC之前,理论上可以在finalized的时候被复活。Phantom reference只有在对象被收回以后才会放入reference queue

    可以用来标记什么时候对象被销毁,也可以用来保证对象不在GC时复活。

    参考:

    http://docs.oracle.com/javase/7/docs/api/java/util/WeakHashMap.html

    https://community.oracle.com/blogs/enicholas/2006/05/04/understanding-weak-references

    http://my.oschina.net/sulliy/blog/482101

  • 相关阅读:
    phonegap开发入门
    [转] jQuery源码分析-如何做jQuery源码分析
    【转】HTML,CSS,font-family:中文字体的英文名称 (宋体 微软雅黑)
    iframe子页面与父页面通信
    5.10团队冲刺
    5.10日
    5.9日团队冲刺
    5.9日自学成果
    5.8日团队冲刺
    5.7日团队冲刺
  • 原文地址:https://www.cnblogs.com/dracohan/p/5391255.html
Copyright © 2011-2022 走看看