我有这个多线程应用程序,它们在发送给它时执行任务。这些任务有时会占用大量内存,但有时候并不多。
无论哪种方式,我都在运行应用程序的unix服务器上查看Java Visual机器,并在unix上使用" top"查看进程级别。
我可以在JVM图上看到,一旦任务完成,堆就会被释放,但是进程的分配内存只会增加(这是top命令中的RES字段)。
这可能是什么原因以及解决这个问题的潜在选择是什么?
非常感谢, 御所
答案 0 :(得分:1)
一个简单的原因可能是Java没有执行任何垃圾收集周期,也没有执行GC周期,这确实会将内存释放回操作系统。
This article解释了GC周期如何将内存释放回操作系统。
答案 1 :(得分:0)
原因在于操作系统(和JVM)如何处理进程的内存分配。只要你有足够的空闲物理内存,就没有理由回收分配给进程的内存(进程可能会再次需要这个内存,因此重新分配内存将是一项相当昂贵的任务)。这里没有错,所以你无需修理。