<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java內(nèi)存管理的8個(gè)小技巧

    1.         盡量使用直接量

    這個(gè)大家應(yīng)該清楚,所以只做簡(jiǎn)訴:
    String str = "hello";
    上面這種方式會(huì)創(chuàng)建一個(gè)“hello”字符串,而且JVM的字符緩存池還會(huì)緩存這個(gè)字符串;
    String str = new String("hello");
    此時(shí)程序除創(chuàng)建字符串外,str所引用的String對(duì)象底層還包含一個(gè)char[]數(shù)組,這個(gè)char[]數(shù)組依次存放了h,e,l,l,o

    2.         使用StringBuilder和StringBuffer進(jìn)行字符串連接

    這個(gè)我就不多講了,用String做連接時(shí)會(huì)生成大量臨時(shí)字符串

    3.         盡早釋放無用對(duì)象的引用

    大部分時(shí),方法局部引用變量所引用的對(duì)象 會(huì)隨著方法結(jié)束而變成垃圾,因此,大部分時(shí)候程序無需將局部,引用變量顯式設(shè)為null

             例如:

             Public void test(){

                       Object obj = new Object();

                       ……

                       Obj=null;

    }

    上面這個(gè)就沒必要了,隨著方法test()的執(zhí)行完成,程序中obj引用變量的作用域就結(jié)束了。但是如果是改成下面:

    Public void test(){

                       Object obj = new Object();

                       ……

                       Obj=null;

                       //執(zhí)行耗時(shí),耗內(nèi)存操作;或調(diào)用耗時(shí),耗內(nèi)存的方法

                       ……

    }

    這時(shí)候就有必要將obj賦值為null,可以盡早的釋放對(duì)Object對(duì)象的引用。

    4.         盡量少用靜態(tài)變量

    當(dāng)某個(gè)對(duì)象被static變量所引用,那么GC通常是不會(huì)回收這個(gè)對(duì)象所占的內(nèi)存。如下:

    Class Person{

             static Object obj = new Object();

    }

    對(duì)于上面的對(duì)象而言,obj變量的生命周期與Person類同步,在其不被卸載的情況下,其對(duì)應(yīng)的Class對(duì)象會(huì)常駐內(nèi)存,知道程序結(jié)束。

    5.         避免在經(jīng)常調(diào)用的方法、循環(huán)中創(chuàng)建java對(duì)象

    6.         緩存經(jīng)常使用的對(duì)象

    這里首先說一個(gè)實(shí)現(xiàn)緩存時(shí)常有的兩種方式:

    使用HashMap進(jìn)行緩存

    直接使用某些開源的緩存項(xiàng)目

    如果是第一種,程序員需要手動(dòng)控制HashMap容器里key-value對(duì)不至于太多,從而導(dǎo)致其占用過大的內(nèi)存,致使系統(tǒng)性能下降。

    而第二種多使用一些緩存算法,提高系統(tǒng)運(yùn)行效率,例如OSCache,Ehcache等,它們大都實(shí)現(xiàn)了FIFO\MRU等常見的緩存算法。

    7.         盡量不要使用finalize方法

    實(shí)際上,將資源清理放在finalize方法中完成是非常不好的選擇,由于GC的工作量很大,尤其是回收Young代內(nèi)存時(shí),大都會(huì)引起應(yīng)用程序暫停,所以再選擇使用finalize方法進(jìn)行資源清理,會(huì)導(dǎo)致GC負(fù)擔(dān)更大,程序運(yùn)行效率更差。

    8.         考慮使用SoftReference

    當(dāng)程序需要?jiǎng)?chuàng)建長(zhǎng)度很大的數(shù)組時(shí),可以考慮使用SoftReference來包裝數(shù)組元素

    SoftReference是個(gè)很好的選擇,當(dāng)內(nèi)存足夠時(shí),它的功能等同于普通引用,當(dāng)內(nèi)存不足時(shí),它會(huì)犧牲自己,釋放軟引用所引用的對(duì)象。例如創(chuàng)建一個(gè)長(zhǎng)度為100000Person數(shù)組。

    注意:在使用軟引用來引用對(duì)象時(shí)不要忘記軟引用的不確定性,程序通過軟引用所獲取的對(duì)象有可能為null(內(nèi)存緊張時(shí))。所以當(dāng)應(yīng)用程序取出SoftReference所引用的java對(duì)象之后,應(yīng)該顯式判斷該對(duì)象死后為null,為null時(shí),應(yīng)該重建對(duì)象。

    總結(jié):這只是在學(xué)習(xí)過程中的一些筆記,希望大家多溝通,共同進(jìn)步

    posted on 2011-07-19 12:27 朝陽(yáng)zzz 閱讀(361) 評(píng)論(0)  編輯  收藏


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


    網(wǎng)站導(dǎo)航:
     
    <2011年7月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章分類

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲av中文无码乱人伦在线r▽| 免费乱码中文字幕网站| 亚洲成AV人片在线观看无码| 日韩在线视频播放免费视频完整版| 在线精品免费视频| 亚洲国产成人精品无码区二本 | 久久免费线看线看| 国产亚洲一区二区三区在线观看| 五月婷婷免费视频| 亚洲一区爱区精品无码| 成av免费大片黄在线观看| 亚洲va无码手机在线电影| 免费一级不卡毛片| 亚洲免费中文字幕| 成人免费a级毛片| WWW亚洲色大成网络.COM| 亚洲A丁香五香天堂网| 中文字幕免费观看全部电影| 国产AV无码专区亚洲AWWW| 人人玩人人添人人澡免费| 亚洲国产精品久久丫| 国产特级淫片免费看| selaoban在线视频免费精品| 亚洲一区免费观看| 我要看免费的毛片| 一道本在线免费视频| 亚洲AV无码一区二区乱子伦| 无人在线直播免费观看| 国产精品成人亚洲| 亚洲国产精品嫩草影院在线观看| 中文字幕av无码无卡免费| 免费高清A级毛片在线播放| 国产精品亚洲а∨无码播放| 男女免费观看在线爽爽爽视频| 黄色a三级三级三级免费看| 亚洲AV无码一区二区三区DV| 黄网址在线永久免费观看 | 狠狠色婷婷狠狠狠亚洲综合 | 亚洲国产精品综合久久久| 国产又长又粗又爽免费视频| 免费在线看黄网站|