java正则表达式提前编译
Java的9将名列前茅的时间支持(AOT)编译提高的小型和大型Java应用程序的启动时间,以最高的峰值性能的影响有限, 根据公告 。 需要提前编译,因为即使JIT编译器速度很快,“ Java程序可能会变得如此庞大,以至于JIT完全预热需要很长时间。” 另外,可能发生的情况是,不经常使用的Java方法根本没有被编译,这可能由于重复的解释调用而导致性能下降。
但是,值得注意的是,唯一受支持的模块是java.base
。 做出此决定的原因是为了减少问题空间“因为java.base
的Java代码是预先众所周知的,并且可以在内部进行全面测试。” 用户必须编译模块并将生成的AOT库复制到JDK安装目录中,或在java命令行上指定它。 jaotc,将使用新工具:
jaotc --output libHelloWorld.so HelloWorld.class
jaotc --output libjava.base.so --module java.base
jaotc是java安装的一部分–与javac
相同。
jaotc --output libHelloWorld.so HelloWorld.class
用户必须在应用程序执行期间指定生成的AOT库:
java -XX:AOTLibrary=./libHelloWorld.so HelloWorld
可以使用与javac
相同的方式使用此工具。
jaotc<options> <--module name>
要么
jaotc<options> <list of classes or/and jar files>
还请参见: Java 9推迟到2017年7月:“拼图需要更多时间”
局限性
只有运行64位Java的64位Linux系统才支持Ahead-of-time,并且支持AOT编译的唯一模块是 java.base
。 它可能不会编译使用动态生成的类和字节码的Java代码,并且应在Java应用程序将在其上使用AOT代码的同一系统或具有相同配置的系统上执行。
另外,并非所有的应用程序都能从AOT编译的代码中受益。 由于这是一项选择功能,因此可以避免用户应用程序可能出现的性能下降。 如果用户注意到应用程序启动速度较慢或未达到预期的峰值性能,则可以使用 -XX:-UseAOT
标志 关闭AOT ,或删除任何AOT库。
在这里阅读整个公告。
翻译自: https://jaxenter.com/java-9-will-support-ahead-time-compilation-129874.html
java正则表达式提前编译