简介
在工作中,经常会见到在启动Java程序的命令行里加一大把启动参数,有些是过时的,有些是不适合每个程序的。本文就简单说说经常见到的-server
参数。
-server参数的作用
在早期jvm中,-server
参数表示Java程序使用Server VM运行。设置server参数可以让jit尽最大努力,用较多的启动时间,把较多的代码预先编译成native代码,增加运行效率。
但在现代JVM(如 Java 8)中,该参数并没有什么作用,因为现代JVM都是Server VM(详细见参考资料1)。
控制JIT编译的参数
现代JVM的JIT默认开启了分层编译,共分为5级:
- level 0 - interpreter
- level 1 - C1 with full optimization (no profiling)
- level 2 - C1 with invocation and backedge counters
- level 3 - C1 with full profiling (level 2 + MDO)
- level 4 - C2
所以如果想要JIT尽可能的优化,可以设置JIT使用C2编译,如:
-XX:TieredStopAtLevel=4
另外,JIT对执行超过一定次数的代码,会编译成native代码,控制该次数的参数是:-XX:CompileThreshold=10000
。编译的native代码也会有大小限制,控制该大小的参数是:-XX:ReservedCodeCacheSize=240m
参考资料
[1]Oracle文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
评论
发表评论