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()會被調用。 如果編譯器不可用。那么這些方法什么都不會做。