技术理论-【JVM】-04-调优实验

实验内容

实验案例

  1. 堆的大小;
  2. 堆的新生代和老年代比例;
  3. 堆的新生代中Eden和Survival区比例;
  4. java对象的成年标准;
  5. 方法区大小;
  6. 内存溢出;
  7. 手动触发GC;
  8. 指定垃圾回收器;

实验参数

//堆总内存大小
-Xmx500m
//堆初始化内存大小
-Xms500m
新生代和老年代内存分配比例
-XX:NewRatio=4
新生代的Eden和Survival的比值(Eden:From:To)8:1:1
-XX:SurvivorRatio=8
老年代的标准(有效区间是0到15),3岁
-XX:MaxTenuringThreshold=3
方法区大小(初始值和最大值)
-XX:MetaspaceSize=100M -XX:MaxMetaspaceSize=300M

实验工具

  1. JDK1.8(jdk1.8.0_131)
  2. jvisualvm.exe + GC插件
  3. jmap -heap pid

实验过程

Java代码

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

public class App {
	
	//老年代对象列表,测试Old一直增加
	static List<String> oldObjectList = new ArrayList<String>();
	
	public static void main(String[] args) {
		//初始化老年代对象
		for (int i = 0; i < 10000; i++) {
			oldObjectList.add("string"+i);
		}
		
		int index = 0 ;
		//让程序无限运行
		while(true){
			//创建临时对象列表,测试Eden、From和To的GC过程
			List<String> tempObjectlist = new ArrayList<String>();
			for (int i = 0; i < 10000; i++) {
				tempObjectlist.add("string"+i);
				oldObjectList.add("string"+(index+i));
			}
			
			//测试手动GC
			System.gc();
			
			//方便观察过程,放慢执行时间
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		
	}

}

查看默认JVM参数
启动程序后,使用java命令“jmap -heap pid”
在这里插入图片描述

自定义参数

  • 准备参数
-Xmx500m -Xms500m  
-XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=3 
-XX:MetaspaceSize=100m 
  • 加入程序启动项
    在这里插入图片描述

  • 对比前后参数变化
    在这里插入图片描述

  • jvisualvm可视化工具
    注意这里新生代和老年代的大小是100:400;
    Eden和S0\S1的大小是80:10:10

在这里插入图片描述

  • 观察From表示的变化
    在这里插入图片描述

  • 内存溢出

在这里插入图片描述

  • 手动GC

在这里插入图片描述

总结

  1. JVM调优就是参数配置;
  2. 常用参数:堆大小、方法区大小、分代区域比例、成年标准;
  3. 方法区在1.8之后使用元素区概念,基本不用关心方法区溢出问题;
  4. 内存大小分为2种,最大空间和初始化空间;如果只有一个应用,建议两者相等;如果多个应用在一台服务器,初始空间可以先小一点;
  5. 新生代的大小有3种设置方式,XX:NewSize > -Xmn >-XX:NewRatio;建议用比例模式;
  6. 手动GC尽量不要用,GC的暂停特性会影响整体性能;
  7. 自定义垃圾回收器意义不大,JVM的智能模式足够了;如果非要配置,吞吐量优先采用并行收集器(ParallelGC+ParallelOldGC),减少回收时间;响应时间优先采用并发收集器(ParNewGC+ConcMarkSweepGC),增加程序运行机会。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值