本文来源如下专栏: 从0带你成为jvm实战高手
1.先从当前环境和访问的服务每秒中qps大概多少,在堆中new的对象大概多少, 比如qps:10000/s 每次做sql查询100条数据,创建单个对象有20个属 因为每个字段都是一个基本数据类型,对象头4字节+引用类型4字节+实例数据(Integer:4 Long:8)+数据填充(变成8的倍数)假设每个属性32b,则一个对象32*20b=600b 那么一秒钟创建的对象为 100*10000*600b=600M
默认的jvm参数配置的空间大小: 2.分析当前虚拟机分配给当前程序的堆内存 假设4核8g机器,当前java启动参数为-Xms:3G -Xmx:3G 新生代和老年代比率为2:1 新生代:2G , 默认对应survivor0:survivor1:eden=1:1:8 即200M:200M:1600M 老年代:1G
gc的过程分析: 3.每秒查询100条数据, 新创建的对象为600M,那么3s后eden区满了,因为此时1800M>1600M,进行分配担保的判断, 此时新生代对象1800M>老年代1G内存,默认-XX:HandlePromotionFailure开启,那么此时判断老年代空闲内存1G大于每次进入老年代的平均对象的大小0,此时进行minor gc, 假设存活的对象为300M,那么此时通过复制算法, 复制到survivor0区域时发现内存不够用, 则将300M对象直接进入到老年代,然后在隔3s后再次触发minor gc, 即第6s,此时老年代对象为600M,第9s后老年代900M,第12s触发minor gc是发现分配担保失败, 因为老年代空闲内存100M
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?