ajie

          Java天下社區(qū) http://www.javatx.cn 歡迎大家上來交流Java技術(shù)
          posts - 4, comments - 8, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          軟引用(Soft  Reference)的主要特點(diǎn)是具有較強(qiáng)的引用功能。只有當(dāng)內(nèi)存不夠的時(shí)候才回收這類內(nèi)存,因此在內(nèi)存足夠的時(shí)候,他們通常不被回收。另外,這些引用對象還能保證在Java  拋出OutOfMemory異常之前,被設(shè)置為null。他可以用于實(shí)現(xiàn)一些常用資源的緩存,實(shí)現(xiàn)Cache的功能,保證最大限度的使用內(nèi)存而不引起OutOfMemory異常。

               下面是軟引用的實(shí)現(xiàn)代碼:
           
           1/**
           2 * 該類演示了Soft Reference的應(yīng)用
           3 * 版權(quán) 本文版權(quán)屬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,將它設(shè)置為soft引用類型,并且釋放強(qiáng)引用
          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由于低內(nèi)存,已釋放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


                 軟引用技術(shù)的引進(jìn)使Java應(yīng)用可以更好的管理內(nèi)存,穩(wěn)定系統(tǒng),防止系統(tǒng)內(nèi)存溢出,避免系統(tǒng)崩潰。因此在處理一些占用內(nèi)存大而且聲明周期較長,但使用并不頻繁的對象時(shí)應(yīng)盡量應(yīng)用該技術(shù)。但事物總帶有兩面性的,有利也有弊,在某些時(shí)候?qū)浺玫氖褂脮档蛻?yīng)用的運(yùn)行效率與性能,例如:應(yīng)用軟引用的對象的初始化過程較為耗時(shí),或者對象的狀態(tài)在程序的運(yùn)行過程中發(fā)生了變化,都會給重新創(chuàng)建對象與初始化對象帶來不同程度的麻煩,有些時(shí)候我們要權(quán)衡利弊擇時(shí)應(yīng)用。

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

          評論

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

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

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

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

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

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

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

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

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

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

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

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

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 东平县| 松潘县| 灌阳县| 襄城县| 宜良县| 济阳县| 瑞安市| 永定县| 天祝| 新邵县| 舟山市| 济源市| 普陀区| 惠水县| 佛教| 耒阳市| 昭通市| 马公市| 浑源县| 乌什县| 邢台县| 大宁县| 兴安盟| 瓦房店市| 农安县| 保亭| 合作市| 来宾市| 平远县| 余干县| 嘉荫县| 辽源市| 共和县| 宁化县| 微博| 元阳县| 酉阳| 仙居县| 钟山县| 肃宁县| 永靖县|