亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何釋放Java中的內存?

如何釋放Java中的內存?

函數式編程 2019-10-09 17:38:20
有沒有一種類似于C free()函數的釋放Java內存的方法?還是將對象設置為null并依靠GC是唯一的選擇?
查看完整描述

3 回答

?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

似乎沒有人提到將對象引用顯式設置為null,這是一種“釋放”您可能要考慮的內存的合法技術。

例如,假設您List<String>在方法開始時就聲明了a ,該方法的大小會變得非常大,但只需要在方法進行到一半時才需要。此時,您可以將List引用設置為,null以允許垃圾回收器在方法完成之前可能回收該對象(并且無論如何該引用都超出范圍)。

請注意,實際上我很少使用這種技術,但是在處理非常大的數據結構時值得考慮。


查看完整回答
反對 回復 2019-10-09
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

System.gc(); 

運行垃圾收集器。


調用gc方法表明,Java虛擬機將花費更多精力來回收未使用的對象,以使它們當前占用的內存可用于快速重用。當控件從方法調用返回時,Java虛擬機將盡最大努力從所有丟棄的對象中回收空間。


不建議。


編輯:我在2009年寫了原始回復?,F在是2015年。


在Java誕生的20多年來,垃圾收集器一直在穩步改善。此時,如果您要手動調用垃圾收集器,則可能需要考慮其他方法:


如果你強迫機器上數量有限GC,它可能是值得擁有的負載均衡點遠從目前的機器,等待它完成投放到連接的客戶端,超時一段時間后懸掛的連接,然后就硬-重新啟動JVM。這是一個糟糕的解決方案,但是如果您正在查看System.gc(),則強制重啟可能是一個權宜之計。

考慮使用其他垃圾收集器。例如,(過去六年中的新產品)G1收集器是一種低暫停時間模型;它總體上使用更多的CPU,但最好不要強迫執行硬停止。由于服務器CPU現在幾乎都具有多個內核,因此這是一個非常不錯的選擇。

查看調整內存使用情況的標志。尤其是在Java的較新版本中,如果沒有那么多長期運行的對象,請考慮增加堆中newgen的大小。newgen(年輕)是分配新對象的位置。對于Web服務器,為請求創建的所有內容都放在此處,如果此空間太小,Java將花費額外的時間將對象升級到壽命更長的內存,在這些內存中銷毀它們的代價更高。(如果newgen太小,您將為此付出代價。)例如,在G1中:

XX:G1NewSizePercent(默認為5;可能沒有關系。)

XX:G1MaxNewSizePercent(默認為60;可能會提高它。)

考慮告訴垃圾收集器您暫停較長時間后還不滿意。這將導致更頻繁的GC運行,以使系統保持其余約束。在G1中:

XX:MaxGCPauseMillis(默認為200。)


查看完整回答
反對 回復 2019-10-09
  • 3 回答
  • 0 關注
  • 1983 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號