jvm常用优化方案和方法

新生代 GC(Minor GC):指发生在新生代的垃圾收集动作,因为 Java 对象大多都具备朝生夕灭的特性,所以 Minor GC 非常频繁,一般回收速度也比较快。
老年代 GC(Major GC / Full GC):指发生在老年代的 GC,出现了 Major GC,经常会伴随至少一次的 Minor GC(但非绝对的,在 ParallelScavenge 收集器的收集策略里就有直接进行 Major GC 的策略选择过程) 。MajorGC 的速度一般会比 Minor GC 慢 10倍以上。

将新对象预留在新生代

  1. 由于Full GC的成本要远远高于Minor GC,因此需要把对象尽可能分配给新生代。
  2. 通过设置一个较大的新生代预留新对象,设置合理的survivor区并提高survivor区的使用率。

大对象进入老年代

  1. 大对象分配在新生代可能破坏原有新生代对象结构
  2. 短命大对象存到老年代,导致回收回收短命大对象成为一种灾难
    解决方法:
    -XX:PretenureSizeThreshold:设置大对象直接进入老年代的阀值,当对象的大小超过这个值,将直接在老年代分配。

    但这个参数只对串行收集器和新生代并行收集器有效,并行回收器不识别这个参数。

设置对象进入老年代的年龄

对象在新生代经过一次GC依然存活,则年龄+1,当年龄达到阀值,就移入老年代。
阀值的最大值通过参数:
-XX:MaxTenuringThreshold来设置,它默认是15。
在实际虚拟机运行过程中,并不是按照这个年龄阀值来判断,而是一句内存使用情况来判断,但这个年龄阀值是最大值,也就说到达这个年龄的对象一定会被移到老年代。

稳定与震荡的堆大小

  1. 当-Xms与-Xmx设置大小一样,是一个稳定的堆,这样做的好处是,减少GC的次数。
  2. 当-Xms与-Xmx设置大小不一样,是一个不稳定的堆,它会增加GC的次数,但是它在系统不需要使用大内存时,压缩堆空间,使得GC应对一个较小的堆,可以加快单次GC的次数。

    可以通过两个参数设置用语压缩和扩展堆空间:
    -XX:MinHeapFreeRatio:设置堆的最小空闲比例,默认是40,当堆空间的空闲空间小于这个数值时,jvm会自动扩展空间。
    -XX:MaxHeapFreeRatio:设置堆的最大空闲比例,默认是70,当堆空间的空闲空间大于这个数值时,jvm会自动压缩空间。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值