模拟出对象进入老年代的场景(上)


prtyaa
prtyaa 2023-12-28 15:30:29 66985 赞同 0 反对 0
分类: 资源
1、动态年龄判定规则 之前我们给大家总结过对象进入老年代的4个常见的时机: 1、对象来回挪 超过15次,进入老年代 2、如果Survivor区域内,比如年龄1岁+2岁+3岁+4岁的对象的总和 > Survivor区的50%,此时年龄4岁以上的对象会进入老年代,不一定要达到15岁 3、如果一次Young GC后存活对象太多无法放入Survivor区,此时直接计入老年代 4、大对象直接进入老年代 首先通过代码模拟出来最常见的一种进入老年代的情况,如果Survivor区域内年龄1+年龄2+年龄3+年龄n的对象总和大 于Survivor区的50%,此时年龄n以上的对象会进入老年代,也就是所谓的动态年龄判定规则。
“-XX:MaxTenuringThreshold=15”设置了,只要对象年龄达到15岁才会直接进入老年代。

2、动态年龄判定规则的部分示例代码

然后会执行下面的代码:byte[] array3 = new byte[2 * 1024 * 1024];

此时希望在Eden区再次分配一个2MB的数组,这显然是不可行的,因为此时Eden区里已经有3个2MB的数组和1个128KB的数组,大小都超过6MB了,Eden总共才8MB,此时是不可能 再创建2MB的数组的。

因此此时一定会触发一次Young GC


接着我们开始看GC日志。

ParNew: 7260K->715K(9216K), 0.0012641 secs

这行日志清晰表明了,在GC之前年轻代占用了7260KB的内存,这里大概就是6MB的3个数组 + 128KB的1个数组 + 几百KB的一些未 知对象,之前就说过大概年轻代刚开始会有512KB左右的未知对象,此时再加上我们自己的128KB的数组,大家想想,是不是 差不多就是700KB?

 

from space 1024K, 69% used [0x00000000ff500000, 0x00000000ff5b2e10, 0x00000000ff600000)

此时From Survivor区域被占据了69%的内存,大概就是700KB左右,这就是一次Young GC后存活下来 的对象,他们都进入From Survivor区了。

同时Eden区域内被占据了26%的空间,大概就是2MB左右,这就是byte[] array3 = new byte[2 * 1024 * 1024];,这行代码在gc过后 分配在Eden区域内的数组

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

评价 0 条
prtyaaL3
粉丝 1 资源 1949 + 关注 私信
最近热门资源
麒麟系统版本介绍白皮书  518
MiSans 阿拉伯语字体文件  462
解决新版本麒麟系统中微信打开白屏显示  402
麒麟系统进行系统监控,查看进程的运行时间来优化性能  334
临时关闭swap分区与永久关闭swap分区(注意必须确保系统有足够内存运行!)  226
统信桌面专业版添加字体  219
统信uos单一程序黑屏,任务栏正常显示解决办法  218
统信uos快捷键文档  189
统信系统双无线网卡设置关闭开启单一网卡  146
分享一个磁盘恢复工具,适用于多平台(包括统信)  124
最近下载排行榜
麒麟系统版本介绍白皮书 0
MiSans 阿拉伯语字体文件 0
解决新版本麒麟系统中微信打开白屏显示 0
麒麟系统进行系统监控,查看进程的运行时间来优化性能 0
临时关闭swap分区与永久关闭swap分区(注意必须确保系统有足够内存运行!) 0
统信桌面专业版添加字体 0
统信uos单一程序黑屏,任务栏正常显示解决办法 0
统信uos快捷键文档 0
统信系统双无线网卡设置关闭开启单一网卡 0
分享一个磁盘恢复工具,适用于多平台(包括统信) 0
作者收入月榜
1

prtyaa 收益399.62元

2

zlj141319 收益236.11元

3

IT-feng 收益219.61元

4

1843880570 收益214.2元

5

风晓 收益208.24元

6

哆啦漫漫喵 收益204.5元

7

777 收益173.07元

8

Fhawking 收益106.6元

9

信创来了 收益106.03元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

添加我为好友,拉您入交流群!

请使用微信扫一扫!