我认为您对 JVM 的工作方式存在误解。这不是 GC 问题或“任务”问题。
您的任务存在内存泄漏,或者它们旨在占用越来越多的内存。
-Xmx1024m 设置 JVM 可以分配的最大内存。这就像你只有 1024 兆物理内存而没有虚拟内存一样。
使用 Task 的定义更新您的问题会很有帮助。这5个独立的JVM吗?或者在单个 JVM 中只有 5 个工作单元。
更新
我不打算让程序总是使用所有 1g 堆。我的意图是指示 JVM 在可以管理的情况下使用 512m 堆,并且仅在需要时使用更多内存。当内存不再需要时,回退到 512m 甚至更少的内存量。
仅仅因为您设置了 -Xmx1024m 并不意味着 JVM 将使用所有这些内存。这只是一个最大限制。设置 Xms 直到设置要使用的最小内存量。您的程序最终决定了正在使用的内存的运行量。如果它达到 -Xmx 设置的限制,那么它将抛出 OutOfMemoryError
您可以建议 JVM 通过调用来运行垃圾收集器System.gc()
。注意我说的建议,你不能强制 GC 运行。你可以在一个甚至拒绝做 GC 的平台上运行。您还需要查看它为您的应用程序选择的 GC 算法。我会看这里Tuning Garbage Collector。
如果您需要对内存使用进行如此精细的控制,您将需要选择除 JVM 之外的其他东西。