论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
读Java性能权威指南(第2版)笔记20_垃圾回收G ...
读Java性能权威指南(第2版)笔记20_垃圾回收G
飞不高
金牌会员
|
2023-3-18 07:44:44
|
显示全部楼层
|
阅读模式
楼主
主题
866
|
帖子
866
|
积分
2598
1. Survivor空间
1.1. 新生代被划分为两个Survivor空间和一个Eden空间的原因
1.1.1. 刚刚被创建并且还在使用中,所以不能被回收,但它们的寿命并没有长到足以进入老年代
1.1.2. 仍在新生代中的对象有额外的机会被回收,而不是晋升到(并填满)老年代
1.2. 首次新生代回收期间,对象从Eden空间移动到Survivor空间0
1.3. 下次回收时,活跃对象会从Survivor空间0和Eden空间移动到Survivor空间1
1.3.1. 此时Eden空间和Survivor空间0完全是空的
1.4. 被移入老年代场景
1.4.1. Survivor空间非常小,当目标Survivor空间在新生代回收过程中被填满时,Eden空间中剩余的任何活跃对象都会被直接移入老年代
1.4.2. 对于停留在Survivor空间中的对象,其经历的GC周期数量有限制,超过这个限制的对象会被直接移入老年代
1.4.2.1. 晋升阈值(tenuring threshold)
1.5. -XX:InitialSurvivorRatio=N
1.5.1. 初始大小
1.5.2. 默认值为8
1.5.2.1. 新生代的10%
1.5.3. survivor_space_size = new_size / (initial_survivor_ratio + 2)
1.6. -XX:MinSurvivorRatio=N
1.6.1. 最大值
1.6.2. 默认情况为3
1.6.2.1. 新生代的20%
1.6.3. maximum_survivor_space_size = new_size / (min_survivor_ratio + 2)
1.6.4. 最小的比例可以得到最大的Survivor空间
1.7. 要让Survivor空间保持固定大小
1.7.1. 将SurvivorRatio设置为期望的值
1.7.2. 禁用UseAdaptiveSizePolicy标志
1.8. XX:TargetSurvivorRatio=N
1.8.1. GC之后Survivor空间的占用率
1.9. -XX:InitialTenuringThreshold=N
1.9.1. Throughput回收器和G1 GC回收器默认是7
1.9.2. CMS默认是6
1.10. -XX:MaxTenuringThreshold=N
1.10.1. 最大阈值
1.10.2. Throughput回收器和G1 GC回收器的默认最大阈值是15
1.10.3. CMS的是6
1.11. -XX:+AlwaysTenure标志
1.11.1. 永远晋升
1.11.2. 相当于把MaxTenuringThreshold设为0
1.11.3. 对象总是会晋升到老年代,而不是存储在Survivor空间中
1.11.4. 默认是false
1.12. -XX:+NeverTenure
1.12.1. 永不晋升
1.12.2. 将初始晋升阈值和最大晋升阈值认为是无穷大
1.12.3. 只要Survivor空间仍有空闲,任何对象都不会晋升到老年代
1.12.4. 默认也是false
1.12.5. 防止JVM降低晋升阈值
1.13. -XX:+PrintTenuringDistribution标志
1.13.1. 在JDK 8中
1.13.2. 将对象年龄分布添加到GC日志中
1.13.3. 默认是false
1.14. Xlog参数加上age
=debug或age
=trace命令
1.14.1. 在JDK11中
1.14.2. 将对象年龄分布添加到GC日志中
1.14.3. 默认是false
2. 分配大对象
2.1. 线程本地分配缓冲区
2.1.1. thread-local allocation buffer,TLAB
2.1.2. 默认是开启的
2.1.3. 所有的GC算法都要考虑TLAB的大小
2.1.4. 它们很小,所以TLAB内不能分配大对象
2.2. TLAB的大小取决于3个因素
2.2.1. 应用程序中的线程数量
2.2.2. Eden空间的大小
2.2.3. 线程的分配速率
2.3. 从TLAB的参数优化中受益场景
2.3.1. 分配很多大对象的应用程序
2.3.2. 和Eden空间的大小相比,线程数量相对较多的应用程序
2.4. -XX:-UseTLAB禁用
2.4.1. 可以提升性能,禁用它们永远是个坏主意
2.5. 大量的分配发生在TLAB之外
2.5.1. 减小分配对象的大小
2.5.2. 调整与TLAB大小相关的参数
2.6. JFR工具
2.7. -XX:+PrintTLAB标志
2.7.1. 在JDK 8
2.8. tlab*=trace
2.8.1. 在JDK 11
2.9. 调整TLAB的大小
2.9.1. -XX:TLABSize=N标志
2.9.1.1. 默认值为0
2.9.1.2. 显式地设置TLAB的大小
2.9.1.3. 只能设置TLAB的初始大小
2.9.2. -XX:-ResizeTLAB标志
2.9.2.1. 默认是true
2.9.2.2. 防止每次GC时都调整大小
2.9.3. 调整TLAB以提升性能的最简单的方法,也是唯一有用的方法
2.10. -XX:TLABWasteTargetPercent
2.10.1. 阈值
2.10.2. 默认是TLAB大小的1%
2.10.3. 动态的
2.11. -XX:TLABWasteIncrement=N
2.11.1. 增幅
2.11.2. 默认是4
2.12. -XX:MinTLABSize=N
2.12.1. TLAB的最小值
2.12.2. 默认为2 KB
2.13. TLAB的最大值略小于1 GB
2.13.1. 可以容纳一个整数数组的最大空间,数组大小向下取整以对齐对象
2.13.2. 不能修改
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
飞不高
金牌会员
这个人很懒什么都没写!
楼主热帖
WPF开发经验-实现自带触控键盘的TextBo ...
Java集合的lastlastIndexOfSubList()方 ...
如何在 K8S 集群范围使用 imagePullSec ...
mysql总结
微信小程序集合3(百度小说+电商+仿哗 ...
AnimateDiff论文解读-基于Stable Diffu ...
【关系型数据库】事务特性及事务隔离级 ...
Python批量采集百度资讯文章,如何自定 ...
自从用了 EasyExcel,导入导出 Excel ...
Doris(三) -- 索引
标签云
挺好的
服务器
快速回复
返回顶部
返回列表