Compiler类提供支持Java到本机代码编译器和相关服务。在设计上,它作为一个占位符在JIT编译器实现。
一、源码部分
public final class Compiler {private Compiler() {} // don't make instancesprivate static native void initialize();private static native void registerNatives();static {registerNatives();java.security.AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {public Void run() {boolean loaded = false;String jit = System.getProperty("java.compiler");if ((jit != null) && (!jit.equals("NONE")) &&(!jit.equals(""))){try {System.loadLibrary(jit);initialize();loaded = true;} catch (UnsatisfiedLinkError e) {System.err.println("Warning: JIT compiler \"" +jit + "\" not found. Will use interpreter.");}}String info = System.getProperty("java.vm.info");if (loaded) {System.setProperty("java.vm.info", info + ", " + jit);} else {System.setProperty("java.vm.info", info + ", nojit");}return null;}});}//编译指定的类。此方法返回true,如果编译成功;返回false如果编译失败或没有编译器可用。public static native boolean compileClass(Class<?> clazz);//方法编译,其名称与指定字符串匹配的所有类。此方法返回true,如果编译成功;返回false如果编译失败或没有编译器可用。public static native boolean compileClasses(String string);//方法检查参数类型及其字段,并执行一些文档操作。该方法返回一个编译器特定的值,包括null。public static native Object command(Object any);//方法调用会导致编译器恢复运行。public static native void enable();//方法会导致编译器停止运作。public static native void disable();
}
二、总结
Compiler 类是用来 支持java语言转native code,并且支持相关服务。 当java虚拟机启动时,首先检查系统属性 java.Compiler是否存在。 如果存在,假定它是一个库的名称,System.loadLibrary将会加载这个库。 如果加载成功,库中的java_lang_Compiler_start()会被调用。 如果编译器不可用。那么这些方法什么都不会做。