「华为」一篇有趣的Java class( 三 )


“下一条指令”

”iadd“

于是他就把两个数从桶里取了出来 ,做了个飞快的动作 ,这两个数变成了一个数 70 ! ,然后他又把70 放到了桶里 。
“下一条指令”
\"istore_0\"
于是他把70从桶里捞出来 ,放到了柜子上编号为0的地方 ,之前的30就被扔掉了 。
我看的目瞪口呆 , 这厮是在干嘛???
我问他: “0x3704 ,不就是把两个数加起来吗? 为啥搞的这么麻烦”
他不理我 ,只是继续说 ,“下一条指令”
我只有配合它玩这个游戏 。
java.lang.String 难得的悠闲 ,端着一杯咖啡一边看我手忙脚乱的取指令 ,一边说:
\"新人都这样 ,别着急 , 等你熟练了 , 闭着眼睛就搞定了 ,就像我一样 , 你可能不知道,我们这个虚拟机叫做基于堆栈的虚拟机 ,看到那个桶没有 , 其实就是个先进后出的栈啊 ,我们虚拟机的所有指令其实都是在对栈进行操作\"
可是我还是好奇: “这栈有什么好啊”
旁边的格子间的java.util.Stack 立刻说:
\"这事儿你得问我啊 ,  怎么说呢 ,主要是为了简单 ,你看我们只用一个简单的桶 , 奥对了 , 栈 ,就能完成所有的工作 ,你做要的就是往栈里扔东西(入栈) ,然后从最上面拿东西(出栈) 就行了 。 不像intel 的CPU 搞了巨多的桶 , 每个桶只能容纳一个数 ,他们还美名其曰寄存器 ,做加法的时候 ,先把一个数放到第一个桶 ,再把另外一个数放到第二个桶 , 加起来以后的结果还得找个桶 , 有些桶还不通用 , 这么多桶找起来麻烦死了 。\"
\"可是我们的栈操作起来就麻烦了啊 ,你看一个简单的加法都得操作半天\"   , 我不依不饶 。
\"我们的指令可以优化啊 ,不过这我也不太懂\"
这个游戏我整整完了一天 , 没有线程找我的时候 ,我就闲着 ,String说得对 ,熟练以后简直太简单了 。
String 就不一样了 ,几乎每时每刻都线程给他打电话要指令 ,这么没办法 ,String确实是虚拟机的骨干和精英 ,使用频繁 , 业务纯熟 , 忙而不乱 。
有时候我会看到线程有不止一个工作台 ,而是一摞子工作台 ,也是一个压一个 ,线程们都很老实 , 永远在最上面那个工作 ,从来不会先干下面的活 。
我问java.util.Stack :\"这些工作台也是栈吧\"

\"猜的不错 , 学名叫Java 栈 , 每个线程都有一个 , 其中的每个工作台你看过了, 学名叫栈帧 ,知道不?  每个台子都代表一个方法调用 ,这一摞工作台就方法调用方法导致的啊 \"
确实是 ,因为我发现一旦调用新方法 ,立刻就会形成一个新的工作台 ,压在老的上面 。方法调用完成后 ,栈顶的工作台就被销毁了 ,线程会在底下的工作台继续机械的干活 。
第四回 快乐假期
第二天 ,0x3704又问我要指令 ,我有点生气: 你就不会记住吗
0x3704说: 我可不能记住 ,万一你被重新装载了 ,指令变了怎么办?
我告诉他指令是\"iload_0\",他刚把数据扔到桶里 , 古怪的事情发生了 ,身手敏捷的0x3704突然好像凝固了一样 , 不动了 。
只听到String欢呼: “遇到断点了 , 码农开始调试了 ,我们放假了!”
\"调试?什么调试?\"
\"就是码农会单步、手工的执行这些指令 , 他们慢死了 ,可能一秒才能执行一步 ,由于我们的时间比他们快的多 ,他们的一秒 , 简直就是我们的10几天 ,走 ,出去玩去\"
\"出去玩? 能上哪儿玩” 我觉得这里无聊透顶 。
\"找我们new 出来的对象玩去\"
我想到了之前联系过我的 对象Account@659e0bfd ,想着去看看也不错 。
这个叫\"堆\"的大楼更加拥挤 ,全是人 ,String 的对象当然最多 , Stirng类左右逢源 , 不停的打招呼 ,从我创建出来的Account对象几乎找不到 。
一队全副武装的士兵不停的在巡逻 ,时不时的把对象拉出来 , 塞到车里去 。