关于 python 虚拟机问题

2016-05-06 12:10:51 +08:00
 SlipStupig
目前我所知道就只有两种虚拟机:
1.基于堆栈的
2.基于寄存器的
如果现在 python 移植成基于寄存器的虚拟机性能会有提升吗?
2928 次点击
所在节点    Python
6 条回复
janxin
2016-05-06 12:24:17 +08:00
性能提升不全部是虚拟机使用哪种形式的问题吧,那么多 Python 模块(Py/C)是不是不用修改就能用呢?这一条限制就够了。
neoblackcap
2016-05-06 12:24:45 +08:00
openJDK 的实现是基于栈的, Dalvik 是基于寄存器的。你觉得 openJDK 的执行效率比 Dalvik 差吗?
SlipStupig
2016-05-06 12:31:31 +08:00
@neoblackcap 对 java 不太懂,具体情况没研究过
neoblackcap
2016-05-06 12:41:57 +08:00
@SlipStupig CPython 若是按你的说法,只会成为一个难移植的产物。效率按道理会提高,但是相对于付出的成本,我觉得就很难说划得来。若是追求效率,为什么不学 Pypy 呢?搞个 JIT ,比什么都强。
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 。
neoblackcap
2016-05-06 14:36:24 +08:00
@mind3x 我知道 JIT 之后就是跟对应平台 native code 一个样。其实我主要就是想表示仅进行到字节码那部分的效率比较。因此我后面才会说 JIT 。
可能我举的例子不好吧,我主要是想举一个栈实现的虚拟机跟基于寄存器实现的虚拟机例子,并说明两者的执行效率并没有想象中的差距那么大。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/276732

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX