JVM中新生代为什么要有两个Survivor?看完就明白~

先介绍一下堆空间:

堆对于一个JVM进程来说是唯一的,一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一个堆空间的。

 问题来了,新生代中为什么有两个survivor区,我们来解释说明一下

解答:是为了解决内存的碎片化问题,那么为什么会产生碎片化呢?我们来画图说明一下...

若存在两个S区:

 结论:不会产生内存碎片

若只有一个S区:

结论:在第二次回收时,就有可能开始产生内存碎片

另外补充几个参数:

  • -Xms:初始堆空间内存
  • -Xmx:最大堆空间内存
  • -Xmn:设置新生代大小
  • -XX:+PrintGCDetails  :收集器日志参数
  • -XX:Survivor-Ratio=8  :决定了新生代中Eden区与一 个Survivor区的空间比例是8∶1
  • -XX:PretenureSizeThreshold :指定大于该设置值的对象直接在老年代分配
  • -XX:MaxTenuringThreshold  :设置新生代垃圾的最大年龄
  • -XX:HandlePromotionFailure :是否设置空间分配担保
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值