网站建设胶州家园,网上书城网站建设目的,百度有刷排名软件,大连哪家做网站比较好您好#xff0c;我是湘王#xff0c;这是我的CSDN博客#xff0c;欢迎您来#xff0c;欢迎您再来#xff5e;前面说过#xff0c;JVM会将堆内存划分为年轻代、老年代两个区域。年轻代会将创建和使用完之后马上就要回收的对象放在里面#xff0c;而老年代则将创建之后需要…您好我是湘王这是我的CSDN博客欢迎您来欢迎您再来前面说过JVM会将堆内存划分为年轻代、老年代两个区域。年轻代会将创建和使用完之后马上就要回收的对象放在里面而老年代则将创建之后需要长期存在的对象放在里面。那么现在再来看一个比较具体的例子。在电商系统中支付系统大概处于这样的位置 核心业务流程是假设日活在100W那么JVM会创建和销毁100万个支付订单。那么问题来了1、需要部署多少台机器2、每台机器需要多大内存3、每台机器上启动的JVM需要分配多大堆内存空间4、JVM需要分配多大内存空间才能保证不会崩溃假设现在面试官坐在你对面这灵魂四连问你该怎么回答所以需要合理地设置JVM堆参数依据是首先要明确的就是每秒钟要处理多少笔订单这里是100万笔那么1、每天100万单都分别在两个高峰期中午和下班后每个高峰持续2小时就是2 × 2 4小时2、4小时 4 × 3600 14400秒3、100万 ÷ 14400秒 69.4单/秒将系统性能弄紧凑一些可以按150单/秒算4、假设支付系统部署了3台机器且采取流量均分策略那么每台机器至少每秒需要处理50个订单支付订单请求 - JVM创建支付订单对象 - 写入数据库 - 处理其他事务 - 返回数据不含网络请求时间损耗假设理想状态下需要花费20毫秒时间那么接收到50笔支付订单请求 - 在JVM年轻代中创建50个订单支付对象 - 50 × 20毫秒1秒之后处理完毕JVM将引用收回这些对象就成了年轻代中的垃圾对象下一秒继续重复上述过程5、每笔支付订单所需的内存空间依据实例对象及变量类型计算每个实例对象的Java基本类型所占据的空间 引用对象所占据的空间 ≈ 1KB50笔支付订单 50K内存空间6、JVM中的对象创建持续累积按照每秒消耗50KB的速度如果没有垃圾回收那么一台内存8G的机器大概会经过46个小时之后将内存耗尽8 × 1024 × 1024K 8388608 / 50 167772 秒 / 3600 46小时服务器肯定不会将全部内存给应用运行最多20%~40%资源实际耗尽时间更短此时垃圾回收出现清场腾位置应用继续运行这个过程循环往复7、真实的系统资源消耗会比理想条件下的预估高出20倍以上。所以这里给出建议的配置方案1、无脑化通用配置2C4G/4C8G2、建议有条件只考虑4C8G及以上硬件成本还会继续下降3、单台-Xms3072M -Xmx3072M -Xmn2048M4、如果业务量更大可以不只部署3台可以是5台10台或更多。大促期间访问量暴增10~100倍因为压力骤增部分请求出现超时甚至卡死、挂掉。这部分特别慢且未被释放的请求可能会被GC误移入老年代导致老年代里也出现越来越多的垃圾对象由此年轻代资源不足 - 年轻代频繁GC - 老年代资源不足 - 老年代频繁GC依据经验一般情况下JVM栈上线初期512K~1M足够永久代上线初期512M~1G足够 FAQ1、方法执行完后栈帧立马出栈因此该栈帧中的变量等数据立即就被回收了2、项目中托管给Spring管理的对象带Configration的都是长期存在于老年代3、自定义的bean对象如果不被定义为类对象就是朝生夕灭的分配在年轻代中4、内存不够才会回收软引用对象内存空间足够的话不会回收软引用对象5、弱引用不管内存空间够不够只能撑到下次垃圾回收之前就被会回收6、垃圾回收的是软引用弱应用和虚引用7、并不是新生代全部占满才minor gc而是只要里面一块主要的内存区域满了就minor gc8、通过合理的估算方式尽量设大新生代 让系统在高峰期不进行垃圾回收。感谢您的大驾光临咨询技术、产品、运营和管理相关问题请关注后留言。欢迎骚扰不胜荣幸