1
janxin 2016-05-06 12:24:17 +08:00
性能提升不全部是虚拟机使用哪种形式的问题吧,那么多 Python 模块(Py/C)是不是不用修改就能用呢?这一条限制就够了。
|
2
neoblackcap 2016-05-06 12:24:45 +08:00
openJDK 的实现是基于栈的, Dalvik 是基于寄存器的。你觉得 openJDK 的执行效率比 Dalvik 差吗?
|
3
SlipStupig OP @neoblackcap 对 java 不太懂,具体情况没研究过
|
4
neoblackcap 2016-05-06 12:41:57 +08:00
@SlipStupig CPython 若是按你的说法,只会成为一个难移植的产物。效率按道理会提高,但是相对于付出的成本,我觉得就很难说划得来。若是追求效率,为什么不学 Pypy 呢?搞个 JIT ,比什么都强。
|
5
mind3x 2016-05-06 12:43:25 +08:00
@neoblackcap 『 openJDK 的实现是基于栈的, Dalvik 是基于寄存器的』说法是错的。
JVM 作为一种抽象的虚拟机,其字节码的定义是基于栈计算的。 DalvikVM 作为一种抽象的虚拟机,其指令的定义是基于寄存器的。 实际在实现的时候,只要做了 JIT 或 AOT ,最后跑起来都经过各种编译优化变成本地代码,和 VM spec 是基于栈还是寄存器的没多大关系。这两种的区别主要是体现在解释器的实现上。 OpenJDK 的 JIT 实现是 Sun 经典的 HotSpot JIT , Dalvik 现在的 ART 既有 AOT 也有 JIT(在 N 里面),这两种实现都不能说是基于栈或基于寄存器,因为是 VM implementation 而不是 VM spec 。 |
6
neoblackcap 2016-05-06 14:36:24 +08:00
@mind3x 我知道 JIT 之后就是跟对应平台 native code 一个样。其实我主要就是想表示仅进行到字节码那部分的效率比较。因此我后面才会说 JIT 。
可能我举的例子不好吧,我主要是想举一个栈实现的虚拟机跟基于寄存器实现的虚拟机例子,并说明两者的执行效率并没有想象中的差距那么大。 |