JVM調優文檔

程序1java

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  #關閉標量替換

程序2web

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自帶的,只能是個參考數值併發

程序4jvm

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

程序5svg

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經常使用參數
 堆設置this

–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:filenamespa

相關文章
相關標籤/搜索