作者liu2007 (薯)
看板java
标题[问题] gc()後,javaw.exe记忆体降不下来
时间Thu Sep 19 12:52:14 2019
我同时使用下列两个软体来查看我程式对於记忆体使用的情况:
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以上的记忆体(而且还不会降下来)
应该就不会想用我的程式...
希望能够帮我解惑,感谢
--
If a child on the street who has nothing is willing to share,
why are we who have everything still so greedy?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.192.227.117 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1568868738.A.C1B.html
※ 编辑: liu2007 (123.192.227.117 台湾), 09/19/2019 12:53:55
1F:推 swpoker: jvm是不会听话的 09/19 16:58
2F:→ ssccg: gc是对jvm来说空的heap增加,不代表jvm heap很空就要还给os 09/19 17:35
3F:→ ssccg: 跟gc参数、collector、jvm版本都有关系,有需要你要去研究 09/19 17:38
4F:推 sw12: 试试不同的os 09/20 13:09
5F:推 atpx: jvm allocate记忆体就不会放掉, 看程式耗用量要看heap 09/28 16:55