一、概述

Compiler这个类被用于支持Java到本地代码编译器和相关服务。在设计上,这个类啥也不做,他充当JIT编译器实现的占位符。

放JVM虚拟机首次启动时,他确定系统属性java.compiler是否存在(系统属性可以通过System类的getProperty(String)和getProperty(String,String)方法获取)。如果存在,就被认定为是库的名称(跟平台依赖相关的确切位置和类型);然后调System.loadLibrary来加载这个库。如果加载成功,函数在库中的名字Wiejava_lang_Compiler_start()。

如果编译器不可用,那么这些方法啥也不干。

二、源码解析

这又是一个native级别的类,所以属性和方法上均有native关键字。

类定义:

public final class Compiler 

有一个私有无参构造,不要使用它构造实例,即使通过反射。

//编译指定的类
public static native boolean compileClass(Class<?> clazz);
//编译名称与指定字符串匹配的所有类
public static native boolean compileClasses(String string);
//使编译器恢复运行
public static native void enable();
//使编译器停止运行
public static native void disable();
//检查参数类型及字段,并执行一些文档化操作, 不需要具体的操作。
public static native Object command(Object any);

一个静态代码块,主要的逻辑

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;}});}

JDK源码(17)-Compiler相关推荐

  1. 17.你知道哪些设计模式,它们在JDK源码中是怎么体现的

    17.你知道哪些设计模式,它们在JDK源码中是怎么体现的 参考外国文献:http://h5ip.cn/lPtD 作者:肥朝 | 微信公众号:肥朝(ID:feichao_java) 一.结构性模式: 1 ...

  2. JDK源码学习路线~每天学一点~每天进步一点点

    很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起.以下为小编整理的通常所需阅读的源码范围. 标题为包名,后面序号为优先级1-4,优先级递减 1.java.lang 1) Objec ...

  3. JAVA JDK源码在线阅读

    Java的版本是1.8.0_111,我把JDK源码发布到了github上,大家看起来也比较方便,地址: https://github.com/daiqingliang/java_jdk1.8.0_11 ...

  4. java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实

    好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...

  5. JDK源码学习笔记——Integer

    一.类定义 public final class Integer extends Number implements Comparable<Integer> 二.属性 private fi ...

  6. jdk javac运行不了_Intellij IDEA搭建jdk源码阅读环境

    一.找到源码位置 直接找到jdk安装的目录,会看到src.zip的压缩包,这里面就是jdk的源码,例如下图: 在这里解压. 第一次尝试建议使用9或更早版本jdk的源码,否则易造成卡死. 二.Intel ...

  7. 从JDK源码角度看Long

    概况 Java的Long类主要的作用就是对基本类型long进行封装,提供了一些处理long类型的方法,比如long到String类型的转换方法或String类型到long类型的转换方法,当然也包含与其 ...

  8. 一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach

    一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 代 ...

  9. JDK源码重新编译——支持eclipse调试JDK源码--转载

    最近在研究jdk源码,发现debug时无法查看源码里的变量值. 因为sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar. 下面这六步是编译jdk的具体步骤: Step 1:   ...

  10. 一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate

    一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点 ...

最新文章

  1. 算术运算符_自增自减运算符
  2. AcWing之从尾到头打印链表
  3. 玩cf一直连接服务器失败怎么办啊,windows10系统玩cf提示连接服务器失败怎么办...
  4. 三菱M80操作介绍_共享屋:三菱M70 PLC 转M80操作步骤
  5. bzoj 3752: Hack 预处理+暴力dfs
  6. HDU2047 阿牛的EOF牛肉串【递推】
  7. 备考通信复试过程中的一些知识点总结梳理——信息论基础知识
  8. 选择排序(直接排序)
  9. 商城商品的知识图谱构建
  10. 基于 SpringBoot + MyBatis 的在线五子棋对战
  11. ios图片放大之后如何不模糊_图片放大后模糊怎么办 怎么放大图片不失真|放大图片保持清晰度的方法...
  12. 视网膜眼底图像的一种检测方法,学习笔记(一)
  13. 阿里达摩院做AI这两年
  14. 分段函数求导数,为什么分段点处一般用导数的定义求导
  15. linux 无线网卡驱动 centrino 6200 agn,下载:Intel无线网卡驱动14.2官方正式版
  16. 计算机维修与维护笔记,笔记本电脑维护选购知识大全
  17. SIM7600CE重置功能
  18. 解决路由报错Uncaught (in promise) NavigationDuplicated:
  19. ps最大兼容 计算机一级,Photoshop最大兼容是什么意思?最大兼容使用解析
  20. 什么是XSL,它有什么用途

热门文章

  1. 移动语音引擎相关开发笔记
  2. JQuery EasyUI之DataGrid列名和数据列分别设置不同对齐方式(转)
  3. VS2010在C#头文件添加文件注释的方法
  4. php程序如何加密(php_screw)
  5. Dubbo(七)使用SpringBoot搭建dubbo消费者工程
  6. Golang list双向链表源码走读
  7. java工程师面试题:如何判断链表有环?
  8. webrtc之onicecandidate的 event handler的一点疑惑
  9. golang rpc单参数调用实例
  10. dockerfile 与 docker-compose的区别