HotSpot的新生代三区划分好在哪?
背景:
复制回收算法是两块相同空间,使用某一块,用完之后再把存活对象移动到另一块空间。
HotSpot使用的复制算法是三块空间S1 S2 Eden,并按照1:1:8的初始比例分配。
问题:
1、HotSpot这种三区划分方法与两区等分划分的不同意义在于哪里?
2、HotSpot中进行Survivor和Eden区域大小调优的思路与意义是什么?
思考:
1、对象多数“朝生夕死”(据IBM统计为98%,HotSpot的划分方案出现在此统计之前),
比如一共有10G的内存,在使用等分复制回收,有两块4G内存,同一时间能够利用并分配的是5G,还有5G空间只存放少量存活对象(如果有所谓的晋升,那么其他的晋升老年代)。
而使用HotSpot的三区划分,我们有S1=1G S2=1G Eden=8G,这样同一时刻能够利用并分配的是8G,并且同一时刻上一轮GC后存活的少量对象一般都在S区(其他的晋升老年代)。
相比之下,同样的内存下,三区划分能够利用更多的内存大小,提高内存利用率。用于分配的空间多了,GC的频率也相应减少(当然一次回收的内存区域变大也会使回收时间相对长些,但内存利用率更高,当为了回收时间相同而要求回收的内存区域大小相同时,三区划分需要消耗的总内存更少)。
2、在HotSpot中进行Survivor和Eden区域大小调优,因为S1=S2,所以指定的是Survivor与Eden之间的大小比例。假定最合适的Eden/Survivor=N,实际Eden/Survivor=R 那么3种情况:
(1)R>N
Eden区偏大,Survivor偏小,这样每次回收后Survivor区域经常无法容纳存活下来的对象时,就会导致更频繁老年代GC甚至触发Full GC
(2)R=N 刚刚好
(3)R<N
Eden区偏小,Survivor偏大,这样每次回收后Survivor区域是相对够用的,不会导致过于频繁的老年代GC,但是新生代回收的频率会相对比较高
而我们在对Survivor和Eden区域大小调优时,尽量去寻找R=N这样一个平衡点。当然,当存活率较高的时候,这种复制算法的效率就会降低——也就需要额外的空间担保,即老年代的应用场景。
以上为思考结论,需要结合实际应用进一步分析。
HotSpot的新生代三区划分好在哪?相关推荐
- JVM存储区划分及是否线程隔离
Java面试题--JVM存储区划分及是否线程隔离 JVM系统划分 运行时数据区划分 一道单选题 JVM系统划分 java虚拟机包括一个类加载器子系统(Class Loader SubSystem).运 ...
- C/C++内存分配、内存区划分、常量存储区、堆、栈、自由存储区、全局区(静态区)、代码区
C/C++内存分配.内存区划分.常量存储区.堆.栈.自由存储区.全局区 C++中,内存分成几个区: 栈(stack) 堆(heap) 自由存储区 全局/静态存储区 常量存储区 代码区 对于C++的内存 ...
- 一段三次分拆的蚂蚁搬家式MySQL迁移经历
趁机房搬迁的机会,打算做一次业务整合.现有的架构是在2010年规划并运营起来的,随着时间的推移,项目也越来越多.打开Nginx配置文件,有四十多行Include包含存在,每一个包含就是一个项目(有些是 ...
- 一百馒头一百僧,大僧三个更无争,小僧三人分一个大小和尚得几丁?
如题:一百馒头一百僧,大僧三个更无争,小僧三人分一个大小和尚得几丁? 要求使用java实现求得大僧小僧各有多少人? public class shdjshj {public static void m ...
- 算法复习第三章分治法
算法复习第三章分治法 循环日程表 最近点对 快速排序: 循环日程表 最近点对
- 三姬分金/四姬分金/五姬分金(海盗分金币)等经典博弈论问题
题目: A.B.C三人分100枚金币,按顺序提议. 规则:提议未获得半数以上(不包括半数)通过,则提议人被处死. 假如你是A,你会怎么提? 从后往前推 如果只剩下B.C 无论B怎么提议,C都不会同意, ...
- 由“三姬分金”到“海盗分金”
"秦时明月--天行九歌篇"中有这么一章:"三姬分金". http://www.tudou.com/albumplay/QxZOIU2BloQ/B4u0I7Vxm ...
- 算法导论(三)--分治法
算法导论(三)--分治法 二分查找 乘方问题 斐波那契数列 矩阵乘法 VLSI(Very Large Scale Integration) Layout(超大规模集成电路布局问题) 分治法就是把一个大 ...
- 《资治通鉴》—— 三家分晋
原文: (威烈王二十三年)初命晋大夫魏斯.赵籍.韩虔为诸侯. 初,智宣子将以瑶为后.智果曰:"不如宵也.瑶之贤于人者五,其不逮者一也.美鬓长大则贤,射御足力则贤,伎艺毕给则贤,巧文辩慧则贤, ...
最新文章
- html标题怎么分开,html – 如何使用angularjs将标签标题与其主体分开?
- xcode 怎么调用midi开发录音_如何组建个人录音工作室
- 如何在Go中实现Elasticsearch
- 常规RPC通讯过程【转载】
- i java 字节码_用java字节码解释i++和++i
- Mac/Linux使用fcrackzip
- java rfc接口_java调用sap的RFC接口
- java模拟抛硬币_用随机数模拟抛硬币
- 新建springboot项目一直转圈圈
- 用python根据生日判断星座_pandas如何将生日按星座分组
- 微擎上传图片失败——加密版本不能使用__DIR__或者__FILE__
- 鸿蒙宴中的人物故事,鸿门宴简介_鸿门宴的主要人物和背景_鸿门宴的目的和结局是什么? - 趣历史...
- SQL Server 下取中位数(中位值)的方法
- DAY2-Ubuntu主题与终端的美化
- 新手从0-1的淘宝客创业之路 新手淘客必读
- html输入密码正确后实现弹窗,仿微信输入支付密码的弹窗
- 小白经济学(一)—经济学是什么
- jQuery调用打印机
- windows自带win+shift+s截图快捷键没反应---与Onenote热键冲突--已解决
- 【信号去噪】基于稀疏性 (BEADS) 实现色谱基线估计和去噪附matlab代码和论文