我认为你对JVM的工作原理有误解.这不是GC问题或“任务”问题.
您的任务有内存泄漏,或者它们旨在保留越来越多的内存.
-Xmx1024m设置JVM可以分配的最大内存.它就像你只有1024兆的物理内存而没有虚拟内存一样.
使用Task的定义更新您的问题会很有帮助.这5个独立的JVM是?或者在一个JVM中只有5个单元的工作.
更新
I don’t intend the program to use all 1g heap always. My intention is to instruct the JVM to use 512m heap if can manage and to use more memory only if required. When the memory is no more required, to fall back to 512m or even less amount of memory.
仅仅因为你设置-Xmx1024m并不意味着JVM将使用所有内存.这只是一个最大限度.设置Xms直到设置要使用的最小内存量.您的程序最终确定正在使用的内存量.如果它达到-Xmx设置的限制,那么它将抛出一个OutOfMemoryError
您可以通过调用System.gc()建议JVM运行垃圾收集器.注意我说建议,你不能强制GC运行.你可能在一个拒绝甚至做GC的平台上运行.您还需要查看它为您的应用程序选择的GC算法.我会在这看Tuning Garbage Collector.
如果你需要对内存使用进行如此细粒度的控制,你需要选择除JVM之外的其他东西.