如何使JVM将内存释放给操作系统
问题原因:在Java 1.8.0_45中使用-XX:+UseG1GC参数后,内存无法回收到操作系统中。
解决方法:需要调整其他参数以使G1GC能够启用内存收缩,这包括调整-XX:MaxHeapFreeRatio和-XX:MinHeapFreeRatio参数。
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);
除了切换垃圾收集器为G1GC外,是否需要调整其他参数?如果G1GC支持内存收缩,那么-XX:MaxHeapFreeRatio和-XX:MinHeapFreeRatio参数也应该有效。
原文链接:https://stackoverflow.com/questions/31545950