java 常量 编译_java常量编译优化问题

记录人力系统线上的问题。

最近在更新了用车和出差模块的代码。但是出现了一些问题。当用车和出差推送钉钉审批的时候,发现审批详情页面无法打开。

开始以为是一些数据关键数据没有保存造成的页面无法打开,但是在pc端同一条数据是可以正常打开审批,所以排除数据问题。

再次看钉钉上页面,发现网页打开的地址前缀是是测试地址,但是发布的时候没有修改钉钉的配置类文件类啊,怎么会出现这样的问题。

先查看正式服务器上的class文件,通过反编译工具反编译后,发现配置文件类里的属性也确实正式的配置。很奇怪的问题,难道是缓存

的问题?那就再重启一下服务器,重启完后,再次测试,发下还是不对。难道服务器上的文件和本地的不一致?找到服务器上的推送钉钉

的实现代码,反编译后发现确实是推送的测试地址,怎么会发生这个问题呢?为什么不是访问的地址,而是直接转换成字符串放在这里?

仔细一想,原来是jvm在编译的时候会自动优化,把静态变量转换化成字符串。

常量一种特殊的变量,因为编译器把他们当作值(value)而不是域(field)来对待。如果你的代码中用到了常变量(constant variable),

编译器并不会生成字节码来从对象中载入域的值,而是直接把这个值插入到字节码中。这是一种很有用的优化,但是如果你需要改变final域

的值那么每一块用到那个域的代码都需要重新编译。

问题原因已经找到,把所有的配置文件类都改成正式配置,从新编译后,再次发布问题解决。这种问题以后得注意了。尽量不要使用静态常量,

用属性文件来代替

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值