JVM 8规范第2.11.1节包括:
换句话说,指令集是有意不正交的。
在我看来,这意味着Java字节码指令集充满了肮脏的漏洞。我知道设计者只被限制在一个字节内来表示操作码,但是他们消耗了8个操作码来表示非正交操作码,更不用说iload、fload、dload等单独的操作码了。我认为使指令集非正交的唯一原因是对内存受限的系统进行优化;这些设计决策似乎使编写优化器变得更加困难,更不用说限制指令集了。
我肯定漏掉了什么。为什么Java设计人员会这样做呢?
**当我说“内存受限”时,我指的是字节码本身的大小。他们使用aload_0的原因大概是因为它比aload 0节省了一个字节,而且它被使用了很多。
发布于 2015-05-28 19:25:41
我肯定漏掉了什么。为什么Java设计人员会这样做呢?
Java起源于最初打算用于“智能设备”的橡树。它最初是在1991年开发的。所以我们说的是老式的嵌入式系统,受到90年代早期标准的高度资源限制。
今天,当“嵌入式系统”可能意味着一台简约但功能齐全的电脑,售价9美元。时,建筑师们似乎有点难以置信,但在将近25年前,在这里保存一个字节,在一个嵌入式系统上保存一个字节仍然是一件大事。
https://softwareengineering.stackexchange.com/questions/284500
复制相似问题