一、JVM常用启动参数说明
-
以 - 开头为标准参数,所有的 JVM 都要实现这些参数,并且向后兼容,如 -server。
-
-D 设置系统属性,如 -Dfile.encoding=UTF-8。
-
以 -X 开头为非标准参数,基本都是传给 JVM 的,默认 JVM 实现这些参数的功能,但是并不保证所有 JVM 实现都满足,且不保证向后兼容。可以使用 java -X 命令来查看当前 JVM 支持的非标准参数,如 -Xmx8g。
-
以 –XX:开头为非稳定参数, 专门用于控制 JVM 的行为,跟具体的 JVM 实现有关,随时可能会在下个版本取消。-XX:±Flags 形式, ± 是对布尔值进行开关,如 -XX:+UseG1GC。-XX:key=value 形式, 指定某个选项的值,如 -XX:MaxPermSize=256m。
-
常用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。
新生代区域采用复制算法
- 堆新对象处理,进入年轻代(Eden Space)
- Eden 100%执行Minor GC。
- Eden存活对象大于Survivor空间,则存活的对象直接进入老年代,Eden回收。
- Eden存活对象不大于Survivor空间,存活对象直接进入Survivor区域,Eden回收。下一次直接清理Eden和Survivor,Eden存活对象则进入另一个Survivor区域。
- 如果每次Survivor区域仍有存活,或者Eden存活+Survivor存活大于Suvivor空间,则统一进入老年代。
- 每次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 倍以上。
标签:Eden,Survivor,存活,XX,了解,GC,JVM From: https://www.cnblogs.com/flywing/p/17916280.html