我正在为我的应用程序使用GC选项XX:+UseParNewGC-XX:+UseConcMarkSweepGC
。
正如大多数人已经体验到的那样,JVM擅长将堆增加到最大堆大小,但它不会将内存释放回操作系统。我遇到了-XX:MaxHeapFreeRatio
和-XX:MinHeapFreeRatio
,但对于并行垃圾收集器,这些都被忽略了。
是否有特殊选项可以强制JVM释放内存回到-XX:MaxHeapFreeRatio and -XX:MinHeapFreeRatio
组合的操作系统。
答案 0 :(得分:5)
在我的Java 1.8.0_45 -XX上:+ UseG1GC使内存缩小。这是我的考验:
MemoryPoolMXBean m = ManagementFactory.getMemoryPoolMXBeans().get(5);
System.out.println(m.getName());
byte[] a = new byte[512 * 1024 * 1024];
System.out.println(m.getUsage().getCommitted() / 1024 / 1024);
a = null;
System.gc();
Thread.sleep(1000);
System.out.println(m.getUsage().getCommitted() / 1024 / 1024);