1、编译期
定义:把*.java文件转换成*.class文件的过程。
虚拟机设计团队把对性能的优化集中到了后端的即时编译器中,这样可以让那些不是由Javac产生的Class文件(如JRuby、Groovy等语言的Class文件)也同样能享受到编译器优化所带来的好处。
可以说,Java中即时编译器在运行期的优化过程对于程序运行来说更重要,而前端编译器在编译期的优化过程对于程序编译来说关系更加密切(如编译器的“语法糖”)。
2、常量折叠 P265
形如int a = 1 + 2;
在编译期间进行了常量折叠,所以在代码里面直接定义“a=1+2”比起直接定义“a = 3”,并不会增加程序运行期哪怕仅仅一个CPU指令的运算量。
3、一个方法的参数和局部变量定义是否使用final修饰符,对运行期是没有影响的(二者的Class文件一模一样),变量的不变性仅仅由编译器在编译期间保证。P267
4、字节码生成:
字节码生成是Javac编译过程的最后一个阶段,实例构造器<init>()方法和类构造器<clinit>()方法就是此阶段添加到语法树中的。期间编译器还会进行少量的代码添加和转换工作。
编译器会把语句块(对实例构造器而言是“{}”块,对于类构造器而言是“static{}”块、变量初始化(实例变量和类变量)、调用父类的实例构造器(仅仅是实例构造器, <clinit>()方法中无须调用父类的<clinit>()方法,虚拟机自动保证父类构造器的执行)等操作收敛到 <init>()和<clinit>()方法之中,并且保证一定是按先执行父类的实例构造器,然后初始化变量,最后执行语句块的顺序进行。
此外,还有一些优化的逻辑,如把字符串的加操作替换为StringBuffer和StringBuilder(取决于目标代码的版本是否大于或等于JDK1.5)的append()操作。
5、语法糖
(1)泛型
重载的方法具有不同的特征签名,而特征签名并不包括返回值。但Class文件格式中,只要描述符不是完全一致的两上方法就可以共存,即两个方法如果有相同的名称和特征签名,但返回值不同,那它们也可以合法地共存于一个Class文件之中。P271
相关推荐
java 虚拟机
深入理解Java虚拟机学习笔记借鉴.pdf
深入理解Java虚拟机笔记(带目录).docx
作者以易于理解的方式深入揭示了java虚拟机的内部工作原理,深入理解这些内容,将对读者更快速地编写更高效的程序大有裨益! 本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行...
深入理解java虚拟机视频教程,jvm原理,java虚拟机,jvm性能调优,内存模型,gc工作原理,内存分配,类的加载等等视频教程
诸葛_BAT面试之深入理解Java虚拟机_9
包括jvm 的内存模型 对象的创建过程 垃圾回收算法 垃圾回收器 内存分配和回收策略
自己看《深入理解Java虚拟机》(第二版)所做的一些笔记。因为个人水平有限,能够理解的也只有前面几章的内容,后面的内容觉得看了也不是很理解,就没有记在里面。希望能对大家有所帮助,也希望能和大家一起进步。
深入理解JAVA虚拟机.xmind
深入理解Java虚拟机(第二版)
前言Java是目前用户最多、使用范围最广的软件开发技术之一。Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java API、Ja
了解jvm的pdf,高清pdf,希望大家下载
30+个视频+深入理解Java虚拟机(jvm优化+内存模型+虚拟机原理)
深入Java虚拟机——本地方法栈.pdf
虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种...Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
NULL 博文链接:https://zhanjia.iteye.com/blog/1842733
深入java虚拟机笔记http://blog.csdn.net/yangzl2008/article/details/8074667
这是自己读《深入理解Java虚拟机》时候用XMind建立的思维导图,目的是为了能够帮助自己整理、梳理相关的知识以及方便自己日后的回顾,帮助自己建立起关于JVM的知识体系,里边也有一些对相关内容的补充,通过备注的...
深入JAVA虚拟机 第二版,比较老的一本书,不那么完美但不影响观看,稍微有点倾斜
不废话Java 虚拟机入门黄金搭档。JVM规范+深入JAVA虚拟机(附带源码)。