一 java体系的理解

2018-11-15  本文已影响0人  BeYearn
  1. 通常把java分为编译期和运行期, 但此处的编译和c语言的编译意义不同, javac的编译是将java源码编译为".class"字节码文件, 而不是可以直接执行的机器码. 在运行时,JVM通过class-loader加载字节码, 然后再解释或者编译执行

  2. jdk8实际是解释和编译混合的模式 提供了JIT(just in time)编译器即动态编译器, 可在运行时将热点代码编译成机器码, 该情况下热点代码就属于编译执行而非解释执行了

  3. jvm启动时.

指定"-Xint" 即告诉jvm只进行解释执行(逐条读入,逐条解释运行),这种模式抛弃了JIT可能带来的性能优势.

指定"-Xcomp" 告诉jvm关闭解释器,不进行解释执行,或者叫做最大优化级别. 但这种模式会导致jvm启动变慢非常多

此外还有一种新的编译方式: AOT(Ahead-of-TIme Compilation),直接将字节码编译为机器码, 这样可避免JIT预热等方面的开销, 如Oracle jdk9, 就增加了AOT特性, 并增加了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

上一篇下一篇

猜你喜欢

热点阅读