JVM初了解

发布时间 2023-12-20 12:56:50作者: 随学·笔记

一、JVM常用启动参数说明

  1. - 开头为标准参数,所有的 JVM 都要实现这些参数,并且向后兼容,如 -server。

  2. -D 设置系统属性,如 -Dfile.encoding=UTF-8。

  3. 以 -X 开头为非标准参数,基本都是传给 JVM 的,默认 JVM 实现这些参数的功能,但是并不保证所有 JVM 实现都满足,且不保证向后兼容。可以使用 java -X 命令来查看当前 JVM 支持的非标准参数,如 -Xmx8g。

  4. 以 –XX:开头为非稳定参数, 专门用于控制 JVM 的行为,跟具体的 JVM 实现有关,随时可能会在下个版本取消。-XX:±Flags 形式, ± 是对布尔值进行开关,如 -XX:+UseG1GC。-XX:key=value 形式, 指定某个选项的值,如 -XX:MaxPermSize=256m。

  5. 常用options。

    -server:jvm启用server模式,启动慢,运行性能和内存管理效率高,适用于生产环境。64位jdk默认此模式忽略-client。

    -client:jvm启用client模式,启动快,运行时性能和内存管理效率不高。

    -Xms:设置JVM的初始堆内存大小,可直接和Xmx值一样。

    -Xmx:设置JVM的最大堆内存大小,推荐内存50%-80%。

    -Xss:设置每个线程的栈大小。

    --Xmn:设置新生代的初始大小,等价于 -XX:NewSize,使用 G1 垃圾收集器 不应该 设置该选项,在其他的某些业务场景下可以设置。官方建议设置为 -Xmx 的 1/2 ~ 1/4。优先级高于-XX:NewRatio。
    -XX:NewRatio:老年代和新生代比例,默认2。

    -XX:SurvivorRatio:设置Eden区和Survivor区的比例,默认8。Survivor有两个。

    -XX:+UseParallelGC:使用并行垃圾回收器。
    -XX:+UseConcMarkSweepGC:使用并发标记清除垃圾回收器。
    -verbose:gc:打印GC日志信息。

    -XX:+UseG1GC:使用 G1 垃圾回收器

    -XX:+UseConcMarkSweepGC:使用 CMS 垃圾回收器

    -XX:+UseSerialGC:使用串行垃圾回收器,JVM默认,般适用于小型应用和单处理器,算法比较简单,GC效率也比较高,但可能会给应用带来停顿。

    -XX:+UseParallelGC:使用并行垃圾回收器,多个线程并行执行GC,一般适用于多处理器系统中,可以提高GC的效率,但算法复杂,系统消耗较大。(配合使用: -XX:ParallelGCThreads=8,并行收集器的线程数,此值最好配置与处理器数目相等)

    XX:MetaspaceSize: 元空间的初始大小是21M,如果启动后GC过于频发,可以设置的大一些,一般设置的是256M

    -XX:MaxMetaspaceSize: 元空间的最大值默认是无限大,一般设置与-XX:MetaspaceSize大小一样。
    ......

二、GC相关

堆内存=新生代+旧生代/老年代+永久区

新生代:主要用来存储新创建的对象,内存较小,垃圾回收频繁。这个区又分为三个区域:一个 Eden Space 和两个 Survivor Space。

新生代区域采用复制算法

  1. 堆新对象处理,进入年轻代(Eden Space)
  2. Eden 100%执行Minor GC。
  3. Eden存活对象大于Survivor空间,则存活的对象直接进入老年代,Eden回收。
  4. Eden存活对象不大于Survivor空间,存活对象直接进入Survivor区域,Eden回收。下一次直接清理Eden和Survivor,Eden存活对象则进入另一个Survivor区域。
  5. 如果每次Survivor区域仍有存活,或者Eden存活+Survivor存活大于Suvivor空间,则统一进入老年代。
  6. 每次Minor GC执行前都会检查老年代空间,如果Eden存活在老年代放不下了,则会先执行Full GC,在Minor GC,Eden存活再进入老年代。

jvm优化,减少Full GC频率,多在新生代空间轮转。

Minor GC 和 Full GC

Minor GC:新生代 GC,指发生在新生代的垃圾收集动作,因为 Java 对象大多死亡频繁,所以 Minor GC 非常频繁,一般回收速度较快。

Full GC:老年代 GC,也叫 Major GC,速度一般比 Minor GC 慢 10 倍以上。