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

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

強制 JVM 釋放內存

強制 JVM 釋放內存

慕村9548890 2022-05-12 15:33:35
我改進了我的代碼,以便從垃圾收集器中獲得更好的結果?,F在,當我調用System.gc()它時,它會釋放所有內存。但是當我在不調用應用程序的情況下觀察內存使用情況時System.gc(),確實會保留并使用越來越多的內存。這是否意味著我的改進正在發揮作用,并且我的所有引用都正確,我可以忽略 JVM 如何自行釋放內存?;蛘呶业拇a中是否還有其他問題是 JVM 在不運行垃圾收集器的情況下保留更多內存的原因。
查看完整描述

3 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

取決于您的 JVM 使用的是哪種 GC。如果它是 JDK9,那么它可能是 G1,它在內存消耗方面是“貪婪的”,因此根據您檢查內存使用的方式,它可能看起來好像占用了大量內存(其中正在保留它并動態/按需使用/釋放。


您可以使用


https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html


檢查內存消耗。


至于 GC 和內存消耗分析,請查看以下內容: G1 垃圾收集器的高內存使用問題 + https://www.javacodegeeks.com/2017/11/minimize-java-memory-usage-right-garbage-collector.html


查看完整回答
反對 回復 2022-05-12
?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

未使用的內存是浪費的內存。

為什么要顯式調用System.gc(). 恕我直言,您永遠不應該調用它并讓 JVM 來決定何時運行 GC。(如果您是新手,JVM 可以做出比您更好的決定。System.gc()只有在您真正知道自己在做什么時才調用。調用System.gc().

System.gc()只是對 JVM 運行 GC 的請求/提示。這絕不意味著 GC 肯定會運行。

您可以在 Java 中出現內存泄漏,但這肯定不是您需要考慮的問題,因為正如您在調用時提到的那樣,System.gc()您可以看到一些內存被釋放。(所以不是你仍然持有未使用對象的引用,這會阻止 GC 清理這些對象。)

為什么你認為你的代碼有問題?可能不需要更多內存,或者如果需要內存,你已經有足夠的內存了(用外行的話來說,GC 不會釋放內存,因為程序還有很多東西可以運行 -那么GC為什么要清理內存呢?)。



查看完整回答
反對 回復 2022-05-12
?
明月笑刀無情

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

沒有辦法強制JVM釋放內存,System.gc()只是一個提示。由 GC 來管理內存(請注意有各種類型的內存,例如堆、元空間、堆外)。每個 GC 算法都有多個可以調整的配置參數,但它們都不會給您提供按需釋放內存的選項。

JVM 在啟動時保留內存并從操作系統請求額外的內存,直到達到配置的任何限制。它以塊增量的方式進行,一次請求 MB 或更多內存,因為從操作系統逐字節請求內存效率非常低。


查看完整回答
反對 回復 2022-05-12
  • 3 回答
  • 0 關注
  • 334 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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