JDK源码解析之 Java.lang.Compiler

2022-12-01 20:17:22 浏览数 (1)

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()会被调用。 如果编译器不可用。那么这些方法什么都不会做。

0 人点赞