我有一个桌面应用程序,有点'记忆力饥渴,每15秒执行一次后台任务。通过JVisualVM进行分析时,每次垃圾收集后使用的堆大约为60mb,GC之前大约为210mb,尽管如果经常使用应用程序,它会增加。堆大小始终在380 / 400mb左右。这几乎一直保持不变,至少在我的本地机器上分析应用程序时。
问题是,在某些客户端,在极少数情况下,系统会挂起,因为操作系统显然没有足够的内存,因为它在堆中使用(即使它没有被使用)申请本身)。
因此,在一台4GB的机器中,当操作系统本身和另一个应用程序消耗大约2GB时,当使用两个或三个应用程序实例时很容易导致内存使用率达到95%,这就是我认为的地方挂起操作系统。
有没有办法让堆大小正好是应用程序需要的?或者我在谈论BS,问题是由于其他原因而发生的?