前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDK源码解析之 Java.lang.Compiler

JDK源码解析之 Java.lang.Compiler

作者头像
栗筝i
发布2022-12-01 20:17:22
3070
发布2022-12-01 20:17:22
举报
文章被收录于专栏:迁移内容

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、源码部分
  • 二、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档