如何“跳转”到Java中的方法而不链接回调用它的位置?

时间:2013-12-15 17:12:50

标签: java mips

我从我的主类调用一个方法,当满足特定条件时,我使用更新的参数调用自己的方法。当我自己调用方法时,我不需要它回到调用它的位置。换句话说,不需要有一个方法调用的“堆栈” - 每个方法调用都可以代替上一个方法在堆栈上的调用。

为了使我的观点更清楚,当使用MIPS汇编语言时,我们使用jump(j)和jump-and-link(jal)。我希望我的方法调用就像一个跳转而不用担心回到它的调用者。我认为这可能会节省一些时间/提高性能。

这是我的代码的相关部分:

if (temp.contains(names[index]))
{
    System.out.println(names[index]);
    if (index < 13)
    {
        index++;
    }
    parse(i, bigLine, index);
}

这个条件块在我的parse方法中,我从它自己调用parse但我不希望它回到调用者。非常感谢有关如何做到这一点的任何想法。

2 个答案:

答案 0 :(得分:1)

这称为尾递归优化,不,Java不支持它。其他JVM语言(如Scala)可以,但在普通的Java中,如果需要这种优化,则需要手动完成,使用迭代而不是递归。在您的情况下,它看起来像:

while (index < 13 && temp.contains(names[index])) {
    System.out.println(names[index]);
    i++;
}

答案 1 :(得分:0)

正如已经说过的,这在Java中是不可能的。你没有goto,所以你唯一的可能就是进行方法调用,这就是堆栈发挥作用的地方。

但是别担心,你在“我认为这可能会提高性能”的猜测中也是完全错误的。在Java中,我们以正确的方式进行优化:分析性能,识别瓶颈并消除或绕过这些瓶颈。这样你就不必“弄清楚”任何东西,你会有冷酷的事实证明你需要做什么。

我建议如果您打算继续使用Java,则不要尝试将其他编程语言投射到它上面。对于汇编语言尤其如此,尽管您可能希望使用字节码本身,如果您希望使用低级别。