java -server标志的行为是什么?
-java -server 标志的行为是什么?
实际上,-server 不影响垃圾收集器,实际上只有非常少的 XX 选项受到影响。
它实际上的作用是运行一个更智能的编译器,称为 C2。它包含了更多的优化(和反优化)和 OSR(栈替换)。它的编译时间更慢,迭代的性能分析也更慢(C1 为 1k,C2 为 10k)。
你需要知道的是 C2 是一个更好的编译器(可以提高性能的因素为 30-100%+),但它在编译时间和性能分析方面较慢。C2 比 C1 做了更多的性能分析来检测快速路径。C2 进行了更多的内联和代码克隆,如果需要的话。
然而,Stackoverflow 不是一个完整的白皮书讨论的地方。
原因:
-java -server 标志的行为是为了运行更智能的编译器 C2,以实现更多的优化和性能提升。然而,由于 C2 的编译时间和性能分析时间较长,因此在某些情况下可能会影响应用程序的启动时间和性能。
解决方法:
如果应用程序对启动时间和性能非常敏感,可以考虑不使用 -java -server 标志,而是使用默认的编译器(C1)。这样可以加快应用程序的启动时间,但可能会牺牲一些性能优化。
如果应用程序对性能要求较高,可以使用 -java -server 标志来启用 C2 编译器。尽管编译时间和性能分析时间较长,但可以获得更好的性能。
在选择是否使用 -java -server 标志时,需要根据具体应用程序的需求进行权衡。如果应用程序的性能要求高于启动时间,那么可以选择使用 -java -server 标志。如果应用程序的启动时间要求高于性能,那么可以考虑不使用该标志。
总之,了解 -java -server 标志的行为和影响对于优化应用程序的性能是非常重要的。根据具体情况选择是否使用该标志可以在启动时间和性能之间进行权衡。