-Xmx //Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;
-Xms //Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;
-Xmn //Java Heap 新生代大小,不熟悉最好保留默认值;
-Xss //每个线程的Stack大小,不熟悉最好保留默认值;
-XX:MaxDirectMemorySize=128m //设置最大堆外内存
-XX:SurvivorRatio=8
新生代中Eden大小 / survivor大小 的值,默认值为8。
-XX:NewRatio=2
老年代大小 / 新生代大小 的值,英文名字感觉像是取反了。默认值为2。即新生代占堆内存的1/3。
-XX:PermSize=128M
设置永久代(方法区)的大小。
-Djava.rmi.server.hostname=B机器ip
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=port
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
java -server -Xms2g -Xmx2g -Xmn512m -XX:CMSInitiatingOccupancyFraction=85 -XX:SurvivorRatio=8 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -Dcom.sun.management.jmxremote.port=2175 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../dumpdir/ -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Xloggc:../gclogdir/
Eclipse中修改待运行程序的参数。package视图|app.java|右键|Run As|Run Configurations,在Arguments 参数中的“VM arguments: ”中填入如下值即可,见图6-1。
-Xms256m -Xmx256m
图6-1 eclipse中指定vm参数
eclipse中运行代码,实质就是它新开了一个线程运行你的代码。
通过代码检验
public class TestMemory {
public static void main(String[] args) {
System. out .println( " 内存信息 :" + toMemoryInfo());
int[][][] a=new int[1000][1000][1000];
System. out .println( " 内存信息 :" + toMemoryInfo());
}
public static String toMemoryInfo() {
Runtime currRuntime = Runtime.getRuntime ();
int nFreeMemory = ( int ) (currRuntime.freeMemory() / 1024 / 1024);
int nTotalMemory = ( int ) (currRuntime.totalMemory() / 1024 / 1024);
return nFreeMemory + "M/" + nTotalMemory +"M(free/total)" ;
}
}
/*
*
* 内存信息 :244M/246M(free/total)
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at TestMemory.main(TestMemory.java:5)
*/