问题

java编译器对常量优化造成的问题
  • 替换常量class文件上线后,发现修改后的class文件不生效,经查,这是因为java编译器的常量传播机制导致的。

常量传播
  • 故名思议,在编译优化时,将能够计算出结果的变量直接替换为常量。
    如:
  1. void main()
  2. {
  3. int a = 1;
  4. printf("%d",a);
  5. }
  6. // 编译器在进行编译的时候,将a直接由1代替。
  7. // 优化后如下:
  8. void main()
  9. {
  10. printf("%d",1);
  11. }

常量折叠
  • 故名思议,在编译优化时,多个变量进行计算时,而且能够直接计算出结果,那么变量将由常量直接替换。
  1. void main()
  2. {
  3. int a = 3+1-1*5;
  4. printf("%d",a);
  5. }
  6. // 优化为:
  7. void main()
  8. {
  9. printf("%d",-1);
  10. }