6.消除過期的對象引用

我們用java管理內(nèi)存是十分容易的,因?yàn)閖vm會幫我管理內(nèi)存的釋放,但是這不意味著我們不用擔(dān)心內(nèi)存的事情了

造成內(nèi)存泄漏的地方一般來說有三個(gè):

  • 過期對象的引用
  • 緩存
  • 監(jiān)聽器和其他的回調(diào)

過期對象的引用

public class Stack {
    private static final int DEFAULT_INITIAL_CAPACITY = 16;
    private Object[] elements;
    private int size = 0;

    public Stack() {
        elements = new Object[DEFAULT_INITIAL_CAPACITY];
    }

    public void push(Object e) {
        ensureCapacity();
        elements[size++] = e;
    }

    public Object pop() {
        if (size == 0) {
            throw new EmptyStackException();
        }
        return elements[--size];
    }

    private void ensureCapacity() {
        if (elements.length == size) {
            elements = Arrays.copyOf(elements, 2 * size + 1);
        }
    }
}

這個(gè)例子看起來是沒有任何問題的,可以通過編譯,但是會造成內(nèi)存泄漏!

緩存
解決辦法是 所有的緩存我們設(shè)置一個(gè)過期時(shí)間, 過期了就將對象進(jìn)行銷毀

監(jiān)聽器和回調(diào)

內(nèi)存泄漏第三個(gè)常見來源是監(jiān)聽器和其他回調(diào)续搀,如果客戶端在你實(shí)現(xiàn)的API中注冊回調(diào),卻沒有顯示的取消菠净,那么就會積聚禁舷。需要確保回調(diào)立即被當(dāng)作垃圾回收的最佳方法是只保存他的若引用毅往,例如將他們保存成為WeakHashMap中的鍵牵咙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市攀唯,隨后出現(xiàn)的幾起案子洁桌,更是在濱河造成了極大的恐慌,老刑警劉巖侯嘀,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件另凌,死亡現(xiàn)場離奇詭異谱轨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)吠谢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門土童,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人工坊,你說我怎么就攤上這事娜扇。” “怎么了栅组?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長枢析。 經(jīng)常有香客問我玉掸,道長,這世上最難降的妖魔是什么醒叁? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任司浪,我火速辦了婚禮,結(jié)果婚禮上把沼,老公的妹妹穿的比我還像新娘啊易。我一直安慰自己,他們只是感情好饮睬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布租谈。 她就那樣靜靜地躺著,像睡著了一般捆愁。 火紅的嫁衣襯著肌膚如雪割去。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天昼丑,我揣著相機(jī)與錄音呻逆,去河邊找鬼。 笑死菩帝,一個(gè)胖子當(dāng)著我的面吹牛咖城,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呼奢,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼宜雀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了控妻?” 一聲冷哼從身側(cè)響起州袒,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弓候,沒想到半個(gè)月后郎哭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體他匪,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年夸研,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了邦蜜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亥至,死狀恐怖悼沈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姐扮,我是刑警寧澤絮供,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站茶敏,受9級特大地震影響壤靶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惊搏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一贮乳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恬惯,春花似錦向拆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碗暗,卻和暖如春奖蔓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背讹堤。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工吆鹤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洲守。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓疑务,卻偏偏與公主長得像,于是被迫代替她去往敵國和親梗醇。 傳聞我的和親對象是個(gè)殘疾皇子知允,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 如圖所示的例子,這段程序中沒有明顯的錯(cuò)誤叙谨,但是存在一個(gè)隱藏的問題(“內(nèi)存泄漏”)温鸽,隨著垃圾回收活動(dòng)的增加,或者由于...
    郭_4d5f閱讀 436評論 0 0
  • 雖然在Java語言中擁有垃圾收集(GC)回收程序,在創(chuàng)建對象后涤垫,不用程序員手動(dòng)回收對象姑尺,但在某些情況下依然會造成內(nèi)...
    QyQiaoo閱讀 328評論 0 1
  • 如果你是從手動(dòng)內(nèi)存管理的語言(比如C或者C++)切換到垃圾回收語言(比如Java),作為程序員你的工作會變得更容易...
    tigershin閱讀 168評論 0 0
  • 當(dāng)你緊握雙手柄粹,里面什么也沒有; 當(dāng)你打開雙手匆绣,世界就在你手中驻右。 我們之所以不快樂,是因?yàn)榭释麚碛械臇|西太多太多了崎淳。...
    叮叮2015閱讀 273評論 0 0
  • 今天下午旺入,跟楊叔出去路邊摘拐棗,順便帶上相機(jī)凯力,一路拍著過去的。不想讓楊哥久等礼华,拍得很隨意咐鹤。 明天早起,出去走走時(shí)帶...
    小凡丫丫閱讀 443評論 8 6