• 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会自动压缩空间。

  • 相关阅读:
    CentOS 阿里源
    使用分区挂载 ftp 目录
    Docker-compose常用命令
    docker 启动容器失败 id already in use
    Docker daemon.json 的配置项目合集
    Watchtower
    umount 时目标忙解决办法
    opencontrail 参考资料
    使用disk-image-builder(DIB)制作Ironic 裸金属镜像
    Nodejs常见安装
  • 原文地址:https://www.cnblogs.com/csuwater/p/5429887.html
Copyright © 2020-2023  润新知