编译器是否优化不变的参数?

时间:2020-05-22 02:11:02

标签: java optimization parameters

class X
{
    public static void func(int timesLeft, Object obj)
    {
        if (timesLeft-- == 0)
            return;

        System.out.println(obj);

        func(timesLeft, obj);
    }
}

在此代码中,很明显参数timesLeft发生了变化,但是obj对于所有函数调用都是相同的。 obj是否为每个调用传递并放在堆栈框架上,还是编译器是否每次都注意到它是同一对象,并进行了一些优化,使得所有调用都为第二个参数访问相同的位置({{1 }}),而不是每个调用都有自己的参数?


编辑:

这个例子只是一个简化的例子。在某些情况下,处理某些数据结构需要递归。例如探索图。例如,如果我想在图上应用dfs,我想跟踪访问的节点(也许使用obj)。由于此布尔数组特定于该函数,并且未在其他地方使用,因此将其存储为字段或其他内容没有任何意义。最好的办法可能是将其传递给每个呼叫。因此,我想知道编译器是否以类似更简单的方式优化了诸如此类的东西。

0 个答案:

没有答案
相关问题