JVM--a == (a = b)基于栈的解释器执行过程

前言

在翻阅ConcurrentLinkedQueue的代码的时候,发现这样一段代码在JDK源码中总是出现。

 t != (t = tail) 原先总是以为这不就是 t != t ?很是纳闷,遂Demo了一下发现并不是我想象中的那样..

 

 

Demo

在运算符优先级当中寻找答案好像是找不出什么答案了,至少我没有想通..

刚好看了JVM之后一直没有用过相关的东西,这次便从字节码层面来探个究竟..

 

字节码

查看字节码内容

stack = 4,需要深度为3的操作数栈

locals = 3,需要3个Slot的局部变量空间

常量池

 

执行过程

 下面就来看一下,Java这种基于栈的解释器是怎么执行这个Demo的。

 

 

附录

虚拟机字节码指令表

https://www.jianshu.com/p/e057695f1184

posted @ 2019-07-07 21:33  MicroCat  阅读(249)  评论(0编辑  收藏  举报