JVM调优文档

程序1

package com.cxl.demo;

public class T1 {

	class User{
		int id;
		String name;
		User(int id,String name){
			this.id = id;
			this.name = name;
		}
	}
	
	void alloc(int i){
		new User(i,"name"+i);
	}
	
	public static void main(String[] args) {
		T1 t = new T1();
		long s1 = System.currentTimeMillis();
		for(int i = 0;i<100000000;i++) t.alloc(i);
		long s2 = System.currentTimeMillis();
		System.out.println(s2 - s1);
	}

}

-XX:+PrintGC             #打印GC
-XX:-UseTLAB            #使用线程本地缓存
-XX:+DoEscapeAnalysis    #使用逃逸分析
-XX:+EliminateAllocations  #关闭标量替换

程序2

package com.cxl.demo;

public class T2 {
	
	public static void main(String[] args) {
		
		byte[] b = new byte[1024];
	}
}
-XX:+PrintGCDetails       #打印GC详情信息
-XX:-UseTLAB            #使用线程本地缓存
-XX:+DoEscapeAnalysis    #使用逃逸分析
-XX:+EliminateAllocations  #关闭标量替换


程序3

package com.cxl.demo;

/**
 *	可以用Runtime类“大致”计算内存情况 
 */
public class T3 {
	
	public static void main(String[] args) {
		printMemoryInfo();
		byte[] b = new byte[1024*1024];
		System.out.println("--------------");
		printMemoryInfo();
		
	}
	
	static void printMemoryInfo(){
		System.out.println("total: " + Runtime.getRuntime().totalMemory());//总共内存
		long total = Runtime.getRuntime().totalMemory();
		System.out.println("free: " + Runtime.getRuntime().freeMemory());//剩余内存
		long free = Runtime.getRuntime().freeMemory();
		String curr = String.valueOf(total-free);
		System.out.println("curr: " + curr);
	}

}

直接跑起来,使用了java自带的,只能是个参考数值

程序4

package com.cxl.demo;

import java.util.ArrayList;
import java.util.List;

/**
 * 内存溢出
 * 	-XX:+HeapDumpOnOutOfMemoryError #内存消耗完了,把堆的信息给(倒入)下载下来
 *  -XX:HeapDumpPath=c:\jvm.dump  #内存溢出堆信息倒入到该路径的文件
 *  -XX:+PrintGCDetails	#打印GC详情信息
 *  -Xms10M #JVM程序起始的堆内存空间
 *  -Xmx10M #JVM最大的堆内存空间  调优一般起始值和最大值一样,效率最高
 */
public class T4 {
	
	public static void main(String[] args) {
		
		List<Object> lists = new ArrayList<Object>();
		for(int i = 0;i<1000000000;i++) lists.add(new byte[1024*1024]);
	}

}

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=f:\jvm.dump
-XX:+PrintGCDetails
-Xms10M
-Xmx10M

程序5

package com.cxl.demo;

/**
 * 递归调用,一直递归调用,调用栈针,总有一天内存会满
 *   Xss128
 *   越小,并发越大
 *   越大,线程递归调用比较深
 */
public class T5 {
	
	static int count = 0;
	
	static void r(){
		count ++;
		r();
	}
	
	public static void main(String[] args){
		try{
			r();
		}catch(Throwable t){
			System.out.println(count);
			t.printStackTrace();
		}
	}

}
-Xss512k

JVM常用参数
 堆设置

–Xms 初始堆大小
-Xmx 最大堆大小
-Xss 线程栈大小
-XX:NewSize=n 设置年轻代大小
-XX:NewRatio=n 设置年轻代和老年代的比值
-XX:SurvivorRatio=n 年轻代中Eden区与两个Survivor区的比值,注意Survivor区有两个
-XX:MaxPermSize=n 设置持久代大小
 收集器设置
-XX:+UseSerialGC 设置串行收集器
-XX:+UseParallelGC 设置并行收集器
-XX:+UseConcMarkSweepGC 设置并发收集器
 垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-Xloggc:filename

posted @ 2019-01-01 09:39  墨小枫233  阅读(414)  评论(0编辑  收藏  举报