问题
java编译器对常量优化造成的问题
- 替换常量class文件上线后,发现修改后的class文件不生效,经查,这是因为java编译器的常量传播机制导致的。
常量传播
- 故名思议,在编译优化时,将能够计算出结果的变量直接替换为常量。
如:
void main(){int a = 1;printf("%d",a);}// 编译器在进行编译的时候,将a直接由1代替。// 优化后如下:void main(){printf("%d",1);}
常量折叠
- 故名思议,在编译优化时,多个变量进行计算时,而且能够直接计算出结果,那么变量将由常量直接替换。
void main(){int a = 3+1-1*5;printf("%d",a);}// 优化为:void main(){printf("%d",-1);}
