Dalvik VM 是否支持(就字节码而言)当前未使用的任何内容,因为 .class 文件没有?
举个例子,如果人们为他们的函数式语言 XYZ 编写他们自己的 Source-to-DX 转换器,他们是否能够实现 e. G。尽管 .class 文件仅在某些情况下支持尾调用,但完整的尾调用?
最佳答案
我不是专家,但据我所知,答案是否。
以下两个站点列出了 Dalvik 和 JVM 的操作码,抛开 Dalvik 是基于寄存器的 VM 而 JVM 是基于堆栈的事实不谈,操作码非常相似。
http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
http://en.wikipedia.org/wiki/Java_bytecode
它们都是专门为处理 Java 语言而定制的(尽管在 JVM 的 future 版本中有解除这种限制的建议)。
在 Java 上尾调用优化的一个问题是调用堆栈实际上对程序可用(例如通过 new Throwable().getStackTrace()
,它也存在于安卓)。如果 VM 进行了尾部调用优化,则它需要对刚刚“优化掉”的内容进行一些簿记,以便能够正确实现 getStackTrace
方法。
关于android - Dalvik 文件格式 (*.dx) 是否支持比 Java .class 文件更多的指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2658253/