[問題] gc()後,javaw.exe記憶體降不下來

作者: liu2007 (è–¯)   2019-09-19 12:52:14
我同時使用下列兩個軟體來查看我程式對於記憶體使用的情況:
1.jconsole觀看 Heap Memory Usage
2.工作管理員的 javaw.exe 記憶體(私人工作集)
當我程式將Queue裡面的東西clear (大量的ImageView)
(基本上那些東西在Queue clear之後就沒有指標指向它們)
(但保險起見把相關的指標都設成null)
並且呼叫System.gc()
盡量在我的認知下不造成memory leak
從jconsole來看,Heap Memory Usage 從將近1GB慢慢降至100MB
但從工作管理員來看,javaw.exe的 記憶體(私人工作集)
始終維持在lifetime中歷史的最高值 (以這個例子來說是1.2G)
我想問以jconsole的結果來看,我有正確釋放記憶體嗎?
如果有的話,為什麼javaw.exe占用的記憶體卻沒有往下掉呢
請問這是我java程式有什麼致命的錯誤嗎?
還是這是作業系統的關係嗎?
雖然程式程式不會當掉
但如果使用者看到我占用1G以上的記憶體(而且還不會降下來)
應該就不會想用我的程式...
希望能夠幫我解惑,感謝
作者: swpoker (swpoker)   2019-09-19 16:58:00
jvm是不會聽話的
作者: ssccg (23)   2019-09-19 17:35:00
gc是對jvm來說空的heap增加,不代表jvm heap很空就要還給os跟gc參數、collector、jvm版本都有關係,有需要你要去研究
作者: sw12 (專注.幽默)   2019-09-20 13:09:00
試試不同的os
作者: atpx (秋雨的心情)   2019-09-28 16:55:00
jvm allocate記憶體就不會放掉, 看程式耗用量要看heap

Links booklink

Contact Us: admin [ a t ] ucptt.com