🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 编译 ~~~ javac xx.java ~~~ 编译后会出现xxx.class # 运行 ~~~ java xx ~~~ main函数正常运行,退出后返回值应该是 0 # 编译模式 jdk8其实是解释和编译混合的一种模式(Xmixed), java虚拟机启动的时候,可以指定不同的参数对运行模式进行选择.比如,指定"-Xint",就是告诉jvm只解释执行,不对代码进行编译,这就抛弃了jit可能带来的性能优势. 对应的还有个"-Xcomp"参数,这是告诉jvm关闭解释器,不要解释执行,或者叫做最大优化级别.这并不是最高效的.他会导致jvm启动变慢很多,同时有些jit编译器优化方式:比如分支预测,不进行分析,往往不能进行有效的优化. 新的编译方式AOT(Ahead-of-Time Compilatio),直接把字节码编译为机器码,避免JIT预热等开销. jdk9的jaotc,就可以把某个类或者模块编译成AOT库 ~~~ jaotc --output libHelloWorld.so HelloWorld.class jaotc --output libjava.base.so --module java.base ~~~ 然后启动的时候直接指定就行 ~~~ java -XX:AOTLibrary=./libHelloWorld.so,./libjava.base.so HelloWorld ~~~ 并且分层编译和AOT协作不是二选一的关系. # mainifest.txt 是jar中,描述那个类带有main(). 把class编译到那个文件夹 ~~~ java -d xxx ~~~