博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM 模拟Young GC及日志分析
阅读量:3724 次
发布时间:2019-05-22

本文共 2835 字,大约阅读时间需要 9 分钟。

本篇文章主要是模拟一次JVM发生一次Young GC的情况后对日志进行分析,为后面的模拟Full GC做准备。

1、JVM的参数设置

JDK1.8-XX:InitialHeapSize=10485760	初始化堆大小10M		-XX:MaxHeapSize=10485760		最大堆大小10M		-XX:NewSize=5242880			初始化新生代大小5M		-XX:MaxNewSize=5242880		最大新生代大小5M		-XX:SurvivorRatio=8			新生代Eden和Survivor比例		-XX:MaxTenuringThreshold=15		动态年龄判定阈值-XX:PretenureSizeThreshold=10486750	大对象阈值/对象大于10M直接进入老年代-XX:+UseParNewGC			新生代使用ParNew垃圾收集器		-XX:+UseConcMarkSweepGC		老年代使用CMS垃圾收集器		-XX:+PrintGCDetails		打印详细的GC日志			-XX:+PrintGCTimeStamps		打印每次GC发生的时间		-Xloggc:gc.log	                将GC日志写入一个磁盘文件

2、Java 代码

public class GCDemo_01 {	public static void main(String[] args) {		/**		 * 创建三个1M大小的数组		 * 将array_1设置为null		 */		byte[] array_1 = new byte[1024 * 1024];		array_1 = new byte[1024 * 1024];		array_1 = new byte[1024 * 1024];		array_1 = null;		/**		 * 创建1M大小的数组		 * Eden区域内存不够发生GC		 */		byte[] array_2 = new byte[1024 * 1024];	}	}

3、过程分析

1.新生代大小5M,Eden大小4M,from大小512K,to大小512K,JVM系统使用内存大小1M(测试得出)。2.创建三个1M的数据,然后将其设置为null,表示其可以被GC回收。3.此时Eden区域4M大小全部被使用,新建一个1M的数据,Eden区域内存不够触发YoungGC。

4、GC 日志

0.292: [GC (Allocation Failure) 0.293: [ParNew: 3964K->512K(4608K), 0.0359199 secs] 3964K->557K(9728K), 0.0359742 secs] [Times: user=0.00 sys=0.00, real=0.04 secs] Heap par new generation   total 4608K, used 1577K [0x00000000ff600000, 0x00000000ffb00000, 0x00000000ffb00000)  eden space 4096K,  26% used [0x00000000ff600000, 0x00000000ff70a558, 0x00000000ffa00000)  from space 512K, 100% used [0x00000000ffa80000, 0x00000000ffb00000, 0x00000000ffb00000)  to   space 512K,   0% used [0x00000000ffa00000, 0x00000000ffa00000, 0x00000000ffa80000) concurrent mark-sweep generation total 5120K, used 45K [0x00000000ffb00000, 0x0000000100000000, 0x0000000100000000) Metaspace       used 2645K, capacity 4486K, committed 4864K, reserved 1056768K  class space    used 282K, capacity 386K, committed 512K, reserved 1048576K

5、GC日志分析

1、GC发生的情况0.292 表示系统运行多久后发生了本次GC,这里表示系统运行292毫秒后发生了此次GC。GC(Allocation Failure) 表示GC发生的原因,内存不够对象分配失败了。ParNew 表示垃圾收集器是ParNew。3964K->512K 表示这次GC将年轻代的内存使用大小从3964K清理到512K,清理了3452K。4608K 表示年轻代可以使用的大小 eden区域加上一个Survivor区域。0.0359199 secs 表示这次GC使用的时间。[Times: user=0.00 sys=0.00, real=0.04 secs] 表示这次GC消耗的时间。2、GC过后堆内存使用情况par new generation   total 4608K, used 1577K 表示ParNew垃圾收集器管理4608K内存,现在适应了1577K内存。eden space 4096K,  26% used 表示新生代eden区域4096K内存,使用了26%from space 512K, 100% used 表示新生代fron区域512K内存,使用了100%to   space 512K,   0% used 表示新生代to区域512K内存,使用了0%concurrent mark-sweep generation total 5120K, used 45K 表示老年代CMS垃圾收集器管理5120K内存,现在使用了45K内存。Metaspace       used 2645K, capacity 4486K, committed 4864K, reserved 1056768Kused:元数据空间当前使用的大小2645K。capacity:元数据空间当前分配的大小4486K。committed:元数据空间提交的大小4864K。reserved:元数据空间大小1056768K。class space    used 282K, capacity 386K, committed 512K, reserved 1048576Kused:类空间当前使用的大小282Kcapacity:类空间当前分配的大小386Kcommitted:类空间提交的大小512Kreserved:类空间大小1048576K

 

转载地址:http://hgtnn.baihongyu.com/

你可能感兴趣的文章
数据动态排名工具(使用方式)
查看>>
数据动态排名工具(所有源码)
查看>>
html网页转pdf工具一(引言及使用效果)
查看>>
html网页转pdf工具二(所有源码)
查看>>
web版python软件授权注册机
查看>>
Win10下安装wireshark不能正常使用,cmd管理员身份调用net start npf命令显示无法启动该服务
查看>>
2020-11-04关于出现tomcat启动失败的一种原因
查看>>
2020-11-09
查看>>
数据挖掘课程实验(8个实验报告)
查看>>
Linux网络操作系统实验报告(1~12)
查看>>
JavaWeb应用开发实验报告下载(共12个)
查看>>
软件测试实验报告下载 实验一到实验五
查看>>
软件项目管理课后题下载【共5个章(1、3、4、5、6)】
查看>>
Oracle DBA
查看>>
单片机入门小实验
查看>>
在云服务器(centos)上搭建nginx服务器
查看>>
本地(windows)对远程服务器mysql数据库进行备份
查看>>
服务器Centos安装mysql5.7
查看>>
自制操作系统, 构建自己的内核——利用C语言绘制操作系统图像界面
查看>>
javaweb小项目有感
查看>>