请教为何JVM不把空闲内存归还给操作系统
找找乐儿 2016-11-23 10:01:55 我们这有一个Jboss的web程序运行在linux上, 最近系统总是报警JAVA进程占用内存过高。
然后我在jboss的tomcat status monitor 可以看到jboss的jvm的内存使用情况是这样的
JVM
Free memory: 10089.94 MB Total memory: 10870.75 MB Max memory: 10870.75 MB
所以很奇怪的看到 JVM已经控制了能分配的最大内存量 10GB, 但是在这10GB中有9GB多是空闲的内存,但是JVM却没有把这些内存归还给操作系统。 我的理解是这里的free memory是JVM通过GC得到的内存,然而如如何把这些内存归还给操作系统就完全是JVM自己的算法来操作了。
我们的系统在晚间是没有用户使用的, 但是发现在大多数情况下,即便过了一个晚上, JVM还是没有把任何free memory 归还给操作系统。每次发生这样的情况 虽然我觉得这种情况对于我们的应用程序没有问题,但是linux系统一直报警,所以只能通过重启jboss来释放这些内存。
所以想听听各位高手的意见。 我们用的是java 6,是不是更新到java8 相应的jvm操控内存的性能会更好一些呢?