• 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

  • 相关阅读:
    B
    R
    C
    B
    异步解决方案----Promise与Await
    NPM 与 Nodejs
    借助node.js + mysql 学习基础ajax~
    bind、call、apply的区别与实现原理
    私有 npm 仓库的搭建
    学习 Promise,掌握未来世界 JS 异步编程基础
  • 原文地址:https://www.cnblogs.com/chengxiaolong/p/10206325.html
Copyright © 2020-2023  润新知