从X86指令深扒JVM的位移操作
本文来自: PerfMa技术社区 PerfMa(笨马网络)官网 概述 之所以会写这个,主要是因为最近做的一个项目碰到了一个移位的问题,因为位移操作溢出导致结果不准确,本来可以点到为止,问题也能很快解决,但是不痛不痒的感觉着实让人不爽,于是深扒了下个中细节,直到看到Intel的指令规约才算释然,希望这篇文章能引起大家共鸣。 本文或许看起来会比较枯燥,不过其实认真看挺有意思的,如果实在看不下去,告诉你一个极简路径,先看下下面的Demo,然后直接跳到后面的小结,如果懂了,别忘记顺便点个赞,请叫我雷锋,哈哈。 Demo 还是从一个简单的例子说起 大家可以尝试做几个改变,看看结果怎样 4 << shift改成4L << shift 将35改成291,PS:提示一下291=25+256*1 如果上面的各种结果你都能解释,那说明你对位移操作还是有一定了解的,不过本文主要从JVM到Intel X86_64指令角度来分析这个问题,或许也值得一看 JVM里4和4L的区别 要知道区别,我们看doShiftL方法通过javac编译出来的指令有什么不一样 4 << shift...
