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 閱讀(10995) 評論(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
          軟引用應該用在頻繁使用的對象上吧,緩存不就是為了頻繁使用嗎?最后的總結是不是有點問題?

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


          網站導航:
           
          主站蜘蛛池模板: 德安县| 龙江县| 三原县| 延长县| 玉屏| 南投县| 东乡族自治县| 溧水县| 罗江县| 江城| 电白县| 泸水县| 寿阳县| 封开县| 尼玛县| 潼关县| 西贡区| 星座| 宁城县| 阿荣旗| 新宾| 江山市| 延吉市| 湖口县| 沂水县| 徐闻县| 商城县| 农安县| 沙田区| 得荣县| 邻水| 颍上县| 苗栗市| 高安市| 交城县| 郑州市| 历史| 霍邱县| 石棉县| 西和县| 汤原县|