如何';跳转';在Java中调用一个方法而不链接回调用它的位置?
我从我的主类中调用一个方法,当满足特定条件时,我用更新的参数调用该方法本身。当我拥有方法调用本身时,我不需要它返回到调用它的位置。换句话说,不需要有方法调用的“堆栈”——每个方法调用都可以取代堆栈上前一个方法的调用 为了让我的观点更清楚,在使用MIPS汇编语言时,我们使用了jump(j)和jump-and-link(jal)。我希望我的方法调用像跳转一样,不必担心返回到调用方。我想这可能会节省一些时间/提高性能 这是我的代码的相关部分:如何';跳转';在Java中调用一个方法而不链接回调用它的位置?,java,mips,Java,Mips,我从我的主类中调用一个方法,当满足特定条件时,我用更新的参数调用该方法本身。当我拥有方法调用本身时,我不需要它返回到调用它的位置。换句话说,不需要有方法调用的“堆栈”——每个方法调用都可以取代堆栈上前一个方法的调用 为了让我的观点更清楚,在使用MIPS汇编语言时,我们使用了jump(j)和jump-and-link(jal)。我希望我的方法调用像跳转一样,不必担心返回到调用方。我想这可能会节省一些时间/提高性能 这是我的代码的相关部分: if (temp.contains(names[index
if (temp.contains(names[index]))
{
System.out.println(names[index]);
if (index < 13)
{
index++;
}
parse(i, bigLine, index);
}
if(临时包含(名称[索引])
{
System.out.println(名称[索引]);
如果(指数<13)
{
索引++;
}
解析(i,bigLine,index);
}
这个条件块在我的parse方法中,我从自身调用parse,但我不希望它返回给调用方。如果您有任何关于如何做到这一点的想法,我将不胜感激 如前所述,这在Java中是不可能的。您没有goto,所以您唯一的可能性是进行方法调用,而这就是堆栈发挥作用的地方 但别担心,您的“我认为这可能会提高性能”猜测也是完全错误的。在Java中,我们以正确的方式进行优化:分析性能、识别瓶颈并移除或绕过这些瓶颈。这样你就不必“弄明白”任何事情,你会有冷酷的事实来证明你需要做什么
我建议,如果您打算继续使用Java,不要尝试将其他编程语言投射到Java上。汇编语言的情况尤其如此,尽管您可能希望使用字节码本身,如果您希望达到如此低的级别。这就是所谓的尾部递归优化,不,Java不支持它。其他JVM语言(如Scala)也可以,但在普通Java中,如果需要这种优化,则需要手动进行,使用迭代而不是递归。在您的情况下,它看起来像:
while (index < 13 && temp.contains(names[index])) {
System.out.println(names[index]);
i++;
}
while(索引<13&&temp.contains(名称[索引]){
System.out.println(名称[索引]);
i++;
}
对我来说,这似乎是过早的优化。。。如果这是可能的,我认为这是不可能的(至少不是没有一些诡计),如果你试图做这种优化,你会从一种完全不同的编程语言中获得更好的性能。您可以创建一个条件并使用“return”或break;不过,我相信有些人会考虑这种糟糕的编程实践。我想你会发现,在更高级的语言中,由于给定函数调用的开销,这将是非常微不足道的。理论上,JIT编译器可以为你执行这种优化。如果我读对了,是的,一个好的JIT将消除这里的尾部调用。