问题
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);
}