java编译器优化和运行期优化】的更多相关文章

概述    最近在看jvm优化,总结一下学习的相关知识 (一)javac编译器 编译过程 1.解析与填充符号表过程 1).词法.语法分析    词法分析将源代码的字符流转变为标记集合,单个字符是程序编写过程的最小元素,而标记则是编译过程的最小元素,javac中由com.sun.tools.javac.parser.Scanner类实现    语法分析是根据token序列构造抽象语法树的过程.抽象语法树(AST)是一种用来描述程序代码语法结构的树形表示方式,语法树种的每一个节点都代表着程序代码中的…
优化1 对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char). 如果没有超过左侧的范围,编译器补上强转. 如果右侧超过了左侧范围,那么直接编译器报错. 代码举例 public class MyDemo11Notice { public static void main(String[] args) { // 右侧确实是一个int数字,但是没有超过左侧的范围,就是正确的. // int…
首先看以下的代码: public static void main(String[] arge) { String str1 = new String("1234"); String str2 = new String("1234"); System.out.println("new String()==:" + (str1 == str2)); String str3 = "1234"; String str4 = &quo…
java编译期优化 java语言的编译期其实是一段不确定的操作过程,因为它可以分为三类编译过程:1.前端编译:把.java文件转变为.class文件2.后端编译:把字节码转变为机器码3.静态提前编译:直接把*.java文件编译成本地机器代码从JDK1.3开始,虚拟机设计团队就把对性能的优化集中到了后端的即时编译中,这样可以让那些不是由Javac产生的Class文件(如JRuby.Groovy等语言的Class文件)也能享受到编译期优化所带来的好处Java中即时编译在运行期的优化过程对于程序运行来…
前言 http://www.cnblogs.com/xrq730/p/4839245.html,HotSpot采用的是解释器+编译器并存的架构,之前的这篇文章里面已经讲过了,本文只是把即时编译器这块再讲得具体一点而已.当然,其实本文的内容也没多大意义,90%都是概念上的东西,对于实际开发.实际解决项目里面的疑难问题并没有什么太大的帮助,只要看过就好了. 编译对象与触发条件 之前讲过,Sun使用的虚拟机之所以被叫做"HotSpot",就是因为运行过程中会检测热点代码,那么运行过程中,会被…
前言 HotSpot采用的是解释器+编译器并存的架构,之前的这篇文章里面已经讲过了,本文只是把即时编译器这块再讲得具体一点而已.当然,其实本文的内容也没多大意义,90%都是概念上的东西,对于实际开发.实际解决项目里面的疑难问题并没有什么太大的帮助,只要看过就好了. 编译对象与触发条件 之前讲过,Sun使用的虚拟机之所以被叫做"HotSpot",就是因为运行过程中会检测热点代码,那么运行过程中,会被即时编译器编译的"热点代码"有两类,即: 被多次调用的方法 被多次执行…
问题概括 静态常量可以再编译器确定字面量,但常量并不一定在编译期就确定了, 也可以在运行时确定,所以Java针对某些情况制定了常量优化机制. 常量优化机制 给一个变量赋值,如果等于号的右边是常量的表达式并且没有一个变量,那么就会在编译阶段计算该表达式的结果. 然后判断该表达式的结果是否在左边类型所表示范围内. 如果在,那么就赋值成功,如果不在,那么就赋值失败. 注意如果一旦有变量参与表达式,那么就不会有编译期间的常量优化机制. 结合问题,我们就可以大致猜出,如果常量能在编译期确定就会有优化,不能…
public class Notice { public static void main(String[] args) { // 右侧20是一个int类型,但没有超过左侧数值范围,就是正确的 // int --> byte 不是自动类型转换 byte num1 = 20; System.out.println(num1); // 20 // 错误:不兼容的类型: 从int转换到byte可能会有损失 // byte num2 = 128; // System.out.println(num2);…
java语言的"编译期"是一段不确定的过程.由于它可能指的是前端编译器把java文件转变成class字节码文件的过程,也可能指的是虚拟机后端执行期间编译器(JIT)把字节码转变成机器码的过程. 以下讨论的编译期优化指的是javac编译器将java文件转化为字节码的过程,而执行期间优化指的是JIT编译器所做的优化. 编译期优化 虚拟机设计团队把对性能的优化集中到了后端的即时编译器(JIT)中,这样能够让那些不是由javac编译器产生的class文件也相同能享受到编译器优化所带来的优点.…
JVM运行期优化 Java程序在运行的期间,可能会有某个方法或者代码块的运行特别频繁时,就会把这些代码认定为“热点代码”.为了提高热点代码的执行效率,在运行时JVM会将这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,JIT编译器). 即时编译器(JIT) 事实上,现在许多主流的商用虚拟机,都同时包含有解释器与编译器,解释器与编译器两者各有优势.与解释器相比,编译器会将常运行到的代码编译成本地代码区实现,可…