java 编译优化_java编译优化

在java中,当编译器将源代码转化为字节码时,会对源代码进行相应的优化操作,具体可以总结为以下几点

tips:泛型与类擦除

java中的泛型是只存在于源代码中的,在已经编译后的字节码文件里,已经替换为了原来的原生类型,并在相应的地方擦除了强制转换代码,在运行中ArrayList与ArrayList是同一个类,尽管在源代码中是不同的泛型

1对常量的操作

(1)如果一个表达式E已经被计算过,而且从先前到现在E中的值没有变化,E会成为公共表达式并且不会再次计算,直接调用之前的结果。

(2)String +常量表达

String a = "a"+"b";

String b = "a"+1;

会被自动优化成

String a ="ab";

Strng b ="a1";

(3)常量替换

final int N =1;

int n=N;

会变成

int N =1;

int n =1;

(4)某些常量计算也会直接算出

int n = 1+1;

会变成

int n =2;

(5)确定的结果也会折叠

boolean f = true||(a&&b||c);

会变成

boolean f =true;

2.数组边界检查消除

如果在一段关于数组的操作中,明显可以确定操作不会越界的话,编译器会把多余的数组越界的检查操作给除掉。

3 逃逸分析

如果一个方法被定下以后,它可能被外部方法给引用,则被称为方法逃逸,被外部线程访问访问到则被称为线程逃逸

,如果可以确定一个方法不会发生方法逃逸或者线程逃逸,编译器会试着通过栈上分配、同步消除、标量替换等手段优化,尽量使得其中使用的局部对象在栈上方法结束后就被销毁。

你可能感兴趣的:(java,编译优化)