第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關(guān)于JVM垃圾回收

關(guān)于JVM垃圾回收

幕布斯6054654 2018-10-18 21:43:45
最近在寫web程序,根據(jù)需要寫了一個緩存,用HashMap做的,大概如下public class XXCache{     private HashMap<String,String> cache = new HashMap<>();        ...        ...     method(){         int i=0;                 ...     } }這個web程序run了兩天沒有任何請求,兩條后我去操作這個緩存,其中的數(shù)據(jù)還在(緩存策略不會清除數(shù)據(jù)),當(dāng)然如果不在的話就出問題了。我的問題是為什么這個cache對象不會被JVM垃圾回收掉呢,是不是類對象不會輕易被回收呢,像method方法中的i局部變量是不是用完過后會馬上被回收掉呢?看過JVM相關(guān)的垃圾回收機(jī)制,當(dāng)時感覺懂了,不過一看具體問題感覺還是不明白
查看完整描述

2 回答

?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊

"一般情況下,JVM在堆空間不夠用了的時候才會開始回收" --什么是G1GC? 要不你打開VisualVM監(jiān)控一下

查看完整回答
反對 回復(fù) 2018-10-28
?
當(dāng)年話下

TA貢獻(xiàn)1890條經(jīng)驗 獲得超9個贊

  1. 這里的i是個primitive。他應(yīng)該是存在棧上的,不在堆上。所以木有垃圾回收一說(當(dāng)然,方法一返回,i內(nèi)存位置的那個數(shù)據(jù)就不可靠了,可以說被“回收”了)。

  2. 沒大看懂那個cache的問題。一般情況下,JVM在堆空間不夠用了的時候才會開始回收。如果你的堆的最大空間(Xmx)設(shè)置的非常大,則JVM通常會擴(kuò)展堆大小,而不是回收垃圾。因為回收垃圾總是要耗CPU的。這終究跟JVM的實現(xiàn)細(xì)節(jié)有關(guān)。

  3. 垃圾回收是這樣的,如果你的程序沒有任何辦法訪問到那個對象了,那么這個對象就可以被回收了。若你創(chuàng)建了一個XXCache對象,他內(nèi)部就包含對那個HashMap的引用,如果你還能訪問那個類別為XXCache的對象,這就說明你可以訪問那個HashMap,JVM就不會貿(mào)然把cache給回收掉。

如果你的程序訪問不到那個XXCache對象了,而且也沒有對cache的其他引用。那cache就隨時有可能被回收。


查看完整回答
反對 回復(fù) 2018-10-28
  • 2 回答
  • 0 關(guān)注
  • 977 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號