java – JVM向OS发回内存
发布时间:2020-12-15 07:37:51 所属栏目:Java 来源:网络整理
导读:参见英文答案 Does GC release back memory to OS?????????????????????????????????????5个 我有一个关于JVM内存管理的问题(至少对于SUN的内存管理问题). 我想知道如何控制JVM将未使用的内存发送回OS(在我的情况下为Windows)这一事实. 我写了一个简单的java
参见英文答案 >
Does GC release back memory to OS?????????????????????????????????????5个
我有一个关于JVM内存管理的问题(至少对于SUN的内存管理问题). 我想知道如何控制JVM将未使用的内存发送回OS(在我的情况下为Windows)这一事实. 我写了一个简单的java程序来说明我的期望. 使用以下程序: package fr.brouillard.jvm; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.List; public class MemoryFree { private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); private List<byte[]> usedMemory = new LinkedList<byte[]>(); private int totalMB = 0; private int gcTimes = 0; public void allocate(int howManyMB) { usedMemory.add(new byte[howManyMB * 1024 * 1024]); totalMB += howManyMB; System.out.println(howManyMB + "MB allocated,total allocated: " + totalMB + "MB"); } public void free() { usedMemory.clear(); } public void gc() { System.gc(); System.out.println("GC " + (++gcTimes) + " times" ); } public void waitAnswer(String msg) { System.out.println("Press [enter]" + ((msg==null)?"":msg)); try { reader.readLine(); } catch (IOException e) { } } public static void main(String[] args) { MemoryFree mf = new MemoryFree(); mf.waitAnswer(" to allocate memory"); mf.allocate(20); mf.allocate(10); mf.allocate(15); mf.waitAnswer(" to free memory"); mf.free(); mf.waitAnswer(" to GC"); mf.gc(); mf.waitAnswer(" to GC"); mf.gc(); mf.waitAnswer(" to GC"); mf.gc(); mf.waitAnswer(" to GC"); mf.gc(); mf.waitAnswer(" to exit the program"); try { mf.reader.close(); } catch (IOException e) {} } } 一旦完成第一个GC(预期的内容),内部堆就会自由,但内存只会从第三个GC开始发送回操作系统.在第四个之后,将完全分配的内存发送回OS. 如何设置JVM来控制此行为? 如果无法控制此行为,我是否可以像这样使用并增加操作系统虚拟内存,让操作系统按需使用它而不会出现大的性能问题. 我猜其他人已经遇到过这样的问题/问题. 谢谢你的帮助. 解决方法
要控制堆返回到OS,从Java 5开始,使用-XX:MaxHeapFreeRatio选项,如
tuning guide中所述.
如果您认为您的问题与this one有意义的不同,请指出如何. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |