JVM 基础篇17 —— 编译期(四)

即时编译器优化技术一览:公共子表达式消除公共子表达式消除是一个普遍应用于各种编译器的经典优化技术,它的含义是:如果一个表达式E已经被计算过了,并且从先前的计算到现在E中所有变量的值都没有发生变化,那么E的这次出现就成为了公共子表达式。对于这种表达式,没有必要花时间再对它进行计算,只需要直接用前面计算

JVM 基础篇16 —— 编译期(三)

即时编译器并不是虚拟机必需的部分,Java虚拟机规范并没有规定Java虚拟机内必须要有即时编译器,更没有限定或指导即时编译器应该如何去实现。但是,即时编译器编译性能的好坏、代码优化程度的高低却是衡量一款商用虚拟机优秀与否的最关键的指标之一,它也是虚拟机中最核心最能体现技术水平的部分。

JVM 基础篇15 —— 编译期(二)

几乎各种语言或多或少都提供过一些语法糖来方便程序员的代码开发,这些语法糖虽然不会提供实质性的功能改进,但是它们或能提高效率,或能提升语法的严谨性,或能减少编码出错的机会。不过也有一种观点认为语法糖并不一定都是有益的,大量添加和使用含糖的语法容易让程序员产生依赖,无法看清语法糖的糖衣

JVM 基础篇14 —— 编译期(一)

编译器Java语言的编译期是一段"不确定"的操作过程,因为它可能指的是不同的编译过程:前端编译器:把*.java文件转变成*.class文件的过程;如:Sun的Javac、EclipseJDT中的增量式编译器(ECJ)等。JIT编译器(JustInTimeCompiler):把字

JVM 基础篇13 —— 字节码解释执行引擎

大部分的程序代码到物理机的目标代码或虚拟机能执行的指令集之前,都需要经过以下几个步骤:程序源码词法分析单词流语法分析抽象语法树程序代码到目标机器代码的生成过程指令流(可选)解释器解释执行解释执行的过程优化器(可选)中间代码生成器目标代码这里并不详细进入到每个步骤了,感兴趣的话可以阅读龙书

JVM 基础篇12 —— JVM中的动态类型语言支持

动态类型语言在动态类型语言的类型检查的主体过程是在运行期而不是编译期。相应的在编译期进行类型检查的又被称为静态类型语言。注:"动态类型语言"和经常容易弄混的"动态语言"以及"弱类型语言"是不同的概念静态类型VS动态类型:静态类型的好处显而易

JVM 基础篇11 —— JVM中的方法调用与优化

方法调用的任务是确定被调用方法的版本(调用的是哪个方法),不会涉及到方法内部的具体执行过程。Class文件的编译过程中不包括传统编译中的连接步骤,所有的方法调用在Class文件中保存的只是符号引用,而不是方法在实际运行时内存布局中的入口地址(相当于直接引用)。这个特性给Java带来了强大的动态布局能

JVM 基础篇10 —— 类加载器

类加载器类与类加载器判断类是否“相等”任意一个类,都由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都有一个独立的类名称空间。因此,比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,被同一个

JVM 基础篇09 —— 类加载

类加载的时机类的生命周期类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括以下7个阶段:加载验证准备解析初始化使用卸载其中验证、准备、解析3个阶段统称为连接。加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始(注意是“开始”,而不是“进

JVM 基础篇08 —— 类文件结构

JVM 的“无关性”谈论 JVM 的无关性,主要有以下两个:平台无关性:任何操作系统都能运行 Java 代码语言无关性: JVM 能运行除 Java 以外的其他代码Java 源代码首先需要使用 Javac 编译器编译成 .class 文件,然后由 JVM 执行 .class 文件,从而程序开始运行。
Your browser is out of date!

Update your browser to view this website correctly. Update my browser now

×