Sun / Oracle
JVM不会将不需要的内存返回给系统。如果您给它提供最大的最大堆大小,并且实际上在某个时候使用了该堆空间,那么JVM不会将其退还给操作系统以用于其他用途。其他JVM会做到这一点(JRockit曾经这样做,但我认为它不再这样做了)。
因此,对于Oracle
JVM,您需要调整应用程序和系统的使用高峰期,这就是它的工作原理。如果您正在使用的内存可以通过字节数组进行管理(例如处理图像等),则可以使用映射的字节缓冲区而不是Java字节数组。映射的字节缓冲区直接从系统获取,不属于堆。当您释放这些对象时(我相信,但不能确定它们是GC的),内存将返回给系统。假设它甚至完全适用,您可能必须使用它。



