Compiler类提供支持Java到本机代码编译器和相关服务。在设计上,它作为一个占位符在JIT编译器实现。
一、源码部分
代码语言:javascript复制public final class Compiler {
private Compiler() {} // don't make instances
private 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()会被调用。 如果编译器不可用。那么这些方法什么都不会做。