Dalvik VM是否支持(在字节码方面)当前未使用的任何内容,因为.class文件没有它?
例如,如果人们为自己的函数式语言XYZ编写自己的Source-to-DX转换器,他们是否能够实现e。 G。尽管.class文件仅在某些情况下支持尾调用,但是完全尾调用?
答案 0 :(得分: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
方法。