3

Dalvik VM 是否支持(就字节码而言)由于 .class 文件没有而目前未使用的东西?

例如,如果人们为他们的功能语言 XYZ 编写自己的 Source-to-DX 转换器,他们是否能够实现例如完整的尾调用,尽管 .class 文件仅在某些情况下支持尾调用?

4

1 回答 1

3

我不是专家,但据我所知,答案是否定的。

以下两个站点列出了 Dalvik 和 JVM 操作码,抛开 Dalvik 是基于寄存器的 VM 和 JVM 是基于堆栈的事实,操作码非常相似。

http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html

http://en.wikipedia.org/wiki/Java_bytecode

它们都是专门为处理 Java 语言而定制的(尽管在未来的 JVM 版本中,有人建议解除这个限制)。

Java 上尾调用优化的问题之一是调用堆栈实际上可用于程序(例如new Throwable().getStackTrace(),通过 Android 上也存在)。如果 VM 进行了尾调用优化,则需要对其刚刚“优化掉”的内容进行一些记账,以便能够正确实现该getStackTrace方法。

于 2010-04-27T07:21:23.617 回答