操作系统正在运行10个虚拟机JVM。事实上,大多数什么都不做 - 只是不时地做一份工作。 每个进程分配600MB的系统内存。我知道实际上最多可以使用100 MB。每个这些进程剩余的500 MB是由JVM(OldGen等)管理的内存。不幸的是,我的系统只有2GB的内存,因此大部分内存分配到了交换区。这意味着,当到达其中一台机器的时候 - 第一个,swap会被读到系统内存几十秒。GC运行后是否可以使用Sun JVM将内存释放到系统?
完成任务后,有什么办法强制JVM向操作系统释放内存吗?例如,GC每隔1-5分钟运行一次,结果进程内存已经释放到系统中。
我使用的是:Linux的x86_64的SMP,Java的热点(TM)64位服务器VM 1.6.0
我认为这是一个重复: http://stackoverflow.com/questions/324499/java-still-uses-system-memory-after-deallocation-of-objects-and-garbage-collecti – 2012-04-26 13:41:36
作为精密:我从来没有找到有关这个主题的具体规范,但我已经看到(在Linux上)由进程释放的内存(但不是很多)。 – 2012-04-26 13:43:13
为什么你需要单独的JVM来完成这些任务 - 为什么你不能仅仅使用一个短暂的任务被启动到一个线程池(使用java.util.concurrent的ExecutorService构造)呢? – kittylyst 2012-04-27 03:03:43