ajie

          Java天下社區 http://www.javatx.cn 歡迎大家上來交流Java技術
          posts - 4, comments - 8, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Java內存管理之軟引用(Soft Reference)

          Posted on 2005-12-18 00:29 ajie 閱讀(10994) 評論(6)  編輯  收藏
          軟引用(Soft  Reference)的主要特點是具有較強的引用功能。只有當內存不夠的時候才回收這類內存,因此在內存足夠的時候,他們通常不被回收。另外,這些引用對象還能保證在Java  拋出OutOfMemory異常之前,被設置為null。他可以用于實現一些常用資源的緩存,實現Cache的功能,保證最大限度的使用內存而不引起OutOfMemory異常。

               下面是軟引用的實現代碼:
           
           1/**
           2 * 該類演示了Soft Reference的應用
           3 * 版權 本文版權屬Java天下
           4 */

           5package cn.javatx;
           6
           7import java.lang.ref.SoftReference;
           8
           9/**
          10 * @author ajie
          11 */

          12
          13public class softReference {
          14
          15    /**
          16     * @param args
          17     */

          18    public static void main(String[] args) {
          19        // TODO Auto-generated method stub
          20        A a = new A();
          21        
          22        //使用a
          23        a.test();
          24
          25        //使用完了a,將它設置為soft引用類型,并且釋放強引用
          26        SoftReference sr = new SoftReference(a);
          27        a = null;
          28        
          29        //下次使用
          30        if (sr != null{
          31            a = (A)sr.get();
          32            a.test();
          33        }
           else {
          34            //GC由于低內存,已釋放a,因此需要重新裝載
          35            a = new A();
          36            a.test();
          37            a = null;
          38            sr = new SoftReference(a);
          39        }

          40    }

          41
          42}

          43
          44class A {
          45    public void test() {
          46        System.out.println("Soft Reference test");
          47    }

          48}

          49


                 軟引用技術的引進使Java應用可以更好的管理內存,穩定系統,防止系統內存溢出,避免系統崩潰。因此在處理一些占用內存大而且聲明周期較長,但使用并不頻繁的對象時應盡量應用該技術。但事物總帶有兩面性的,有利也有弊,在某些時候對軟引用的使用會降低應用的運行效率與性能,例如:應用軟引用的對象的初始化過程較為耗時,或者對象的狀態在程序的運行過程中發生了變化,都會給重新創建對象與初始化對象帶來不同程度的麻煩,有些時候我們要權衡利弊擇時應用。

          Java天下
          http://www.javatx.cn

          評論

          # re: Java內存管理之軟引用(Soft Reference)   回復  更多評論   

          2007-06-18 16:22 by 史壽偉
          使用 if (sr != null) { 來判斷軟引用的對象是否可用是不對的。

          sr 始終是不為空的,可能為空的是 sf.get() 而不是 sf 本身。

          # re: Java內存管理之軟引用(Soft Reference)   回復  更多評論   

          2007-11-01 10:43 by snoopy
          @史壽偉
          ding

          # re: Java內存管理之軟引用(Soft Reference)   回復  更多評論   

          2008-12-19 13:48 by 1111
          感覺有問題..

          # re: Java內存管理之軟引用(Soft Reference)   回復  更多評論   

          2010-06-11 16:47 by Rosen
          @史壽偉
          的確不需要再去判斷了。

          # re: Java內存管理之軟引用(Soft Reference)   回復  更多評論   

          2011-11-02 17:02 by DLevin
          贊同,這個例子感覺不好。。。。@史壽偉

          # re: Java內存管理之軟引用(Soft Reference)   回復  更多評論   

          2012-12-31 17:39 by geeksnail
          軟引用應該用在頻繁使用的對象上吧,緩存不就是為了頻繁使用嗎?最后的總結是不是有點問題?

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 永顺县| 开阳县| 乌兰浩特市| 柞水县| 惠州市| 灵石县| 富蕴县| 淮南市| 科尔| 阳原县| 龙岩市| 枣庄市| 屏山县| 禄劝| 宜春市| 常熟市| 尉氏县| 宜丰县| 靖江市| 松原市| 巴林左旗| 利津县| 磴口县| 晋宁县| 屏山县| 涟水县| 和硕县| 若尔盖县| 宁乡县| 辉南县| 息烽县| 东丰县| 汝南县| 翼城县| 祁阳县| 宜良县| 克东县| 嘉禾县| 江安县| 裕民县| 河西区|