模拟频繁Young GC


prtyaa
prtyaa 2024-01-24 20:51:31 47833 赞同 0 反对 0
分类: 资源 标签: 后端
通过代码演示年轻代的Young GC是如何发生的, 如何在JVM参数中去配置打印对应的GC日 志, 通过GC日志来慢慢的分析JVM的GC到底是如何运行的。

平时系统运行创建的对象,除非是那种大对象,否则通常来说都是优先分配在新生代中的 Eden区域的。

而且新生代还有另外两块Survivor区域,默认Eden区域占据新生代的80%,每块Survivor区域占据新生代的10%。

5242880 = 5MB 10485760 = 10MB jdk1.8

根据以上可以得出

堆内存初始和最大堆大小都是10MB

初始新生代和最大新生代都是5MB

这样算下来,内存大概是这样,堆里刚好10MB


1、如何打印出JVM GC日志?


2、开始代码,eden区放不下对象了 ,所以YGC

这段代码,在eden区分配了3个1MB的对象 ,最后array1=null,3个byte数组对象成了垃圾,而eden区上面也说了是4MB,两个survivor各占0.5MB

那现在eden区里已经有了3MB的对象了,

此时会分配一个2MB大小的数组array2所指的对象,尝试放入Eden区中,大家觉得这个时候Eden区能放的下吗?

明显是不行的,因为Eden区总共就4MB大小,而且里面已经放入了3个1MB的数组了,所以剩余空间只有1MB了,此 时你放一个2MB的数组是放不下的。

所以这个时候就会触发年轻代的Young GC。


3、采用指定JVM参数运行程序

在Eclipse等开发工具里如何以指定JVM参数运行程序,就是对你的程序右键,然后选择“Run As -> Run Configurations”,接着在下图中填入对应的JVM参数:

然后运行即可,此时运行完毕后,会在下述工程目录中出现一个gc.log文件,里面就是本次程序运行的gc日志,如下图所示。

打开gc.log文件,我们会看到如下所示的gc日志:

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL2
粉丝 1 资源 1949 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  131
统信桌面专业版【全盘安装UOS系统】介绍  129
银河麒麟桌面操作系统安装佳能打印机驱动方法  121
银河麒麟桌面操作系统 V10-SP1用户密码修改  109
麒麟系统连接打印机常见问题及解决方法  30
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
麒麟系统连接打印机常见问题及解决方法 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益210.13元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!