我有一个桌面应用程序,它“有点”需要内存,总是每15秒执行一次后台任务。当通过JVisualVM分析它时,每次垃圾回收之后使用的堆大约是60mb,GC之前大约是210mb,但如果应用程序使用非常频繁,它可能会增加。堆大小始终在380/400mb左右。这几乎一直保持不变,至少在分析我本地机器上的应用程序时是这样。
问题是,在一些客户端,在极少数情况下,系统挂起,因为显然操作系统本身没有足够的内存,因为它在堆中使用(即使不是由应用程序本身使用)。
因此,在一台4 go的机器上,当操作系统本身和其他应用程序消耗大约2 go时,当使用应用程序的两个或三个实例时,很容易导致内存使用率上升到95%,我认为这是操作系统挂起的地方。
有没有办法让堆大小恰好满足应用程序的需求?或者我说的是胡说八道,问题是由于其他原因而发生的?
发布于 2016-03-09 23:04:33
您可以尝试将堆的限制设置得更小。这将迫使垃圾收集器采取行动,但会使程序的内存占用更小。
在SO中有一个关于如何设置that的问题。
https://stackoverflow.com/questions/35894651
复制相似问题