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

前言

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

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

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

Demo

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

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

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

字节码

查看字节码内容

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

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

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

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

常量池

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

执行过程

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

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

附录

虚拟机字节码指令表

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

上一篇:mysql7笔记----遍历节点所有子节点


下一篇:Linux Exploit系列之三 Off-By-One 漏洞 (基于栈)