JDK源码(17)-Compiler
一、概述
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相关推荐
- 17.你知道哪些设计模式,它们在JDK源码中是怎么体现的
17.你知道哪些设计模式,它们在JDK源码中是怎么体现的 参考外国文献:http://h5ip.cn/lPtD 作者:肥朝 | 微信公众号:肥朝(ID:feichao_java) 一.结构性模式: 1 ...
- JDK源码学习路线~每天学一点~每天进步一点点
很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起.以下为小编整理的通常所需阅读的源码范围. 标题为包名,后面序号为优先级1-4,优先级递减 1.java.lang 1) Objec ...
- JAVA JDK源码在线阅读
Java的版本是1.8.0_111,我把JDK源码发布到了github上,大家看起来也比较方便,地址: https://github.com/daiqingliang/java_jdk1.8.0_11 ...
- java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实
好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...
- JDK源码学习笔记——Integer
一.类定义 public final class Integer extends Number implements Comparable<Integer> 二.属性 private fi ...
- jdk javac运行不了_Intellij IDEA搭建jdk源码阅读环境
一.找到源码位置 直接找到jdk安装的目录,会看到src.zip的压缩包,这里面就是jdk的源码,例如下图: 在这里解压. 第一次尝试建议使用9或更早版本jdk的源码,否则易造成卡死. 二.Intel ...
- 从JDK源码角度看Long
概况 Java的Long类主要的作用就是对基本类型long进行封装,提供了一些处理long类型的方法,比如long到String类型的转换方法或String类型到long类型的转换方法,当然也包含与其 ...
- 一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach
一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 代 ...
- JDK源码重新编译——支持eclipse调试JDK源码--转载
最近在研究jdk源码,发现debug时无法查看源码里的变量值. 因为sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar. 下面这六步是编译jdk的具体步骤: Step 1: ...
- 一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate
一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点 ...
最新文章
- 算术运算符_自增自减运算符
- AcWing之从尾到头打印链表
- 玩cf一直连接服务器失败怎么办啊,windows10系统玩cf提示连接服务器失败怎么办...
- 三菱M80操作介绍_共享屋:三菱M70 PLC 转M80操作步骤
- bzoj 3752: Hack 预处理+暴力dfs
- HDU2047 阿牛的EOF牛肉串【递推】
- 备考通信复试过程中的一些知识点总结梳理——信息论基础知识
- 选择排序(直接排序)
- 商城商品的知识图谱构建
- 基于 SpringBoot + MyBatis 的在线五子棋对战
- ios图片放大之后如何不模糊_图片放大后模糊怎么办 怎么放大图片不失真|放大图片保持清晰度的方法...
- 视网膜眼底图像的一种检测方法,学习笔记(一)
- 阿里达摩院做AI这两年
- 分段函数求导数,为什么分段点处一般用导数的定义求导
- linux 无线网卡驱动 centrino 6200 agn,下载:Intel无线网卡驱动14.2官方正式版
- 计算机维修与维护笔记,笔记本电脑维护选购知识大全
- SIM7600CE重置功能
- 解决路由报错Uncaught (in promise) NavigationDuplicated:
- ps最大兼容 计算机一级,Photoshop最大兼容是什么意思?最大兼容使用解析
- 什么是XSL,它有什么用途