今天修改了之前写的springboot starter中的源码,并deploy到maven私库后,另一个工程B更新了代码,在工程B中找到了class文件,打了断点准备调试,忽然发现idea反编译后的代码跟我写的源码有个明显的结构性差异:
下图是我写的代码,注意userName变量的定义位置。
下图是反编译的代码,注意userName变量的作用域被提升了
当时觉得很奇怪,后来忽然想到好像在哪里看到过编译优化,翻了一下周志明老师的经典著作 深入理解java虚拟机,果然找到了答案
这个应该就是编译优化中的全局代码调整做的事情了。