Java服务器应用常用启动参数详解

先来看看大厂的一个java服务器程序配置的java启动参数:

-Xms8g -Xmx8g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:+UnlockExperimentalVMOptions 
-XX:G1MaxNewSizePercent=65 -XX:+UseG1GC -XX:InitiatingHeapOccupancyPercent=55 -XX:G1HeapRegionSize=16m 
-XX:G1NewSizePercent=25 -XX:MaxGCPauseMillis=120 -XX:+ParallelRefProcEnabled -XX:MaxDirectMemorySize=1g 
-XX:+TraceG1HObjAllocation -XX:ReservedCodeCacheSize=512m -XX:+UseCodeCacheFlushing

堆大小

-Xms8g -Xmx8g

Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。

在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为:Eden(伊甸园)、Survivor(幸存者)。

元空间

-XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m

它是一个特殊的堆空间,它与主Java堆分开,JVM在主堆中跟踪已加载类的元数据

在Java8及以后的版本中,它取代了旧的PermGen内存空间,我们可以使用以下命令设置元空间的初始大小和最大大小

解锁实验参数

-XX:+UnlockExperimentalVMOptions

解锁实验参数,允许使用实验性参数,JVM中有些参数不能通过-XX直接复制需要先解锁,
比如要使用某些参数的时候,可能不会生效,需要设置这个参数来解锁;
一般使用在一些低版本jdk想使用高级参数或者可能高版本有的参数情况;

垃圾回收器

-XX:+UseG1GC

回收器有串行收集器、并行收集器、并发收集器,G1收集器…, G1 GC是面向服务端应用程序的垃圾回收器

新生代

-XX:G1MaxNewSizePercent=65

新生代占堆内存的大小,初始为-XX:G1NewSizePercent设置的值,默认为:5%,G1会根据满足暂停时间的值而对占比进行调整,

但最大不会超过-XX:G1MaxNewSizePercent设置的值,默认为:60%

并发标记触发阈值

-XX:InitiatingHeapOccupancyPercent=55

在标记阶段是并发执行, 可以同时回收年轻代和老年代。

当整个堆占用超过某个百分比时,就会触发并发GC周期,这个百分比默认是45%
如果你的项目没有大的cpu负载压力,可以适当降低这个值,带来的好处就是提前开始Concurrent Marking Cycle Phases ,
进一步来说,回收 年轻代 and 老年代 也会提前开始,这样有利于防止年轻代晋升老年代失败(老年代容量不足)而触发Full GC

Region

-XX:G1HeapRegionSize=16m

G1垃圾收集器与之前垃圾收集器最大的不同就是化整为零,将内存区域分成多个Region. Region size必须是2的指数,取值范围从1M到32M

例如一个12G的堆内存,Region Size是缺省4M.如果内部有很多对象的大小为几兆到十几兆,大于了G1HeapRegionSize,那么这些对象会被分配到H(巨大对象)区,H对象被直接分配到老年代,防止被反复拷贝移动.这会造成老年代的使用不断增加引起Full GC.

新生代占堆内存的大小

-XX:G1NewSizePercent=25

新生代占堆内存的大小,默认为:5%,G1会根据满足暂停时间的值而对占比进行调整,但最大不会超过-XX:G1MaxNewSizePercent设置的值,默认为:60%

GC最大停顿时间

-XX:MaxGCPauseMillis=120

如果更关注吞吐量可以设置GCTimeRatio参数

-XX:GCTimeRatio=nnn 表示希望在GC花费不超过应用程序执行时间的1/(1+nnn),nnn为大于0小于100的整数。

换句话说,此参数的值表示运行用户代码时间是GC运行时间的nnn倍。

举个官方的例子,参数设置为19,那么GC最大花费时间的比率=1/(1+19)=5%,程序每运行100分钟,允许GC停顿共5分钟,其吞吐量=1-GC最大花费时间比率=95%

默认情况下,VM设置此值为99,运行用户代码时间是GC停顿时间的99倍,即GC最大花费时间比率为1%

启用并行引用处理

-XX:+ParallelRefProcEnabled

可以用来并行处理 Reference,以加快处理速度,缩短耗时

堆外直接内存

-XX:MaxDirectMemorySize=1g

JVM堆内存大小可以通过-Xmx来设置,同样的Direct ByteBuffer可以通过-XX:MaxDirectMemorySize来设置,此参数的含义是当Direct ByteBuffer分配的堆外内存到达指定大小后,即触发Full GC。默认是64M

Trace

-XX:+TraceG1HObjAllocation

在使用G1 GC策略时,Humongous对象的分配会极大伤害G1的性能,使用命令行选项 -XX:+TraceG1HObjAllocation,在标准输出打印大对象时,用户可以根据这些Trace信息,在应用层面减少大对象的分配,提升G1使用的性能。

代码缓存

-XX:ReservedCodeCacheSize=512m

Java代码在执行时一旦被编译器编译为机器码.编译后的机器码的内存区域就是CodeCache。
这是一块独立于Java堆之外的内存区域。除了JIT编译的代码之外,Java所使用的本地方法代码(JNI)也会存在CodeCache中。

-XX:+UseCodeCacheFlushing

打开这个选项,在JIT被关闭之前,也就是CodeCache装满之前,会在JIT关闭前做一次清理,删除一些CodeCache的代码;


<<<<<<<<<<<< ⌛ >>>>>>>>>>>>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱游泳的老白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值