几个非常常用的内存配置参数:
public static void main(String[] args) {
byte[] bs = new byte[1*1024*1024];
System.out.println("分配了1M的内存空间");
jvmInfo();
byte[] bs1 = new byte[4*1024*1024];
System.out.println("分配了4M的内存空间");
jvmInfo();
}
public static String toM(long byteNum) {
float num = byteNum/(1024*1024);
DecimalFormat df = new DecimalFormat("0.00");
String str = df.format(num);
return str;
}
public static void jvmInfo() {
//获取配置的最大内存
long maxMemory = Runtime.getRuntime().maxMemory();
System.out.println("maxMemory:" + maxMemory + "字节," + toM(maxMemory) + "M");
//获取空闲的内存大小
long freeMemory = Runtime.getRuntime().freeMemory();
System.out.println("freeMemory:" + maxMemory + "字节," + toM(freeMemory) + "M");
//获取当前使用掉的内存大小
long totalMemory = Runtime.getRuntime().totalMemory();
System.out.println("totalMemory:" + maxMemory + "字节," + toM(totalMemory) + "M");
}
}
堆大小设置:
-Xms:JVM启动时申请的初始Heap值
-Xmx:JVM可申请的最大Heap值
Server端JVM最好将-Xms和-Xmx设为相同值
-XX:MaxHeapFreeRation/-XX:MinHeapFreeRation来指定比例
-------------------------------------------------------
-Xmn:堆中年轻代,整个堆的3/8
整个堆大小=年轻代大小 + 年老代大小 + 持久代大小(相对于HotSpot 类型的虚拟机来说)。
持久代一般固定大小为64m
-----------------------------------------------------------------------
-Xss:线程堆栈大小为1M,操作系统对一个进程内的线程数还是有限制的,不能无限生成,经
验值在3000~5000左右。(推荐:小系统:-Xss126K,大系统:-Xss256K)
--------------------------------------------------------------------------
-XX:PermSize
持久代(方法区)的初始内存大小。(例如:-XX:PermSize=64m)
-XX:MaxPermSize
持久代(方法区)的最大内存大小。(例如:-XX:MaxPermSize=512m)
-XX:+MaxTenuringThreshold=10
垃圾的最大年龄,代表对象在Survivor区经过10次复制以后才进入老年代。如果设置为0,则年轻代对象不经过Survivor区,直接进入老年代。