Стоимость вызова вложенного метода в Java - PullRequest
3 голосов
/ 24 января 2012

Мое предположение состоит в том, что при оптимизации компилятора (например, встраивание) практически не имеет значения, является ли метод «вложенным» в несколько уровней. Это действительно так?

Например, скажем, что объявлены следующие 3 класса:

public class Third extends Second
{
    public int test3() // Call test2() and nothing else
    {
        return super.test2();
    }
}

public class Second extends First
{
    public int test2()
    {
        return super.test1(); // Call test1() and nothing else
    }
}

public class First
{
    public int test1() // Calculate a result somehow
    {
        int result = 0;
        ...
        return result;
    }
}

С учетом 3 уже созданных объектов third, second и first, затраты на следующие вызовы практически одинаковы?

third.test3();
third.test2();
third.test1();
second.test2();
second.test1();
first.test1();

Будет ли какая-то разница в оптимизации, если имя метода будет таким же?

Ответы [ 2 ]

4 голосов
/ 24 января 2012

Стоит ли беспокоиться о накладных расходах на вызов метода?Большую часть времени нет.Только тогда, когда у вас есть метод, который очень сильно вызывается в цикле, эти издержки имеют значение.

Обычно наносекунды разницы во времени означают присед, когда работа, которую выполняют ваши методы, будет полной частью времени, потраченного навыполнение.Кроме того, как вы упомянули, виртуальная машина Java HotSpot делает встраивание вызовов методов там, где это необходимо.Это решение до ВМ, однако.См. Эту ссылку:

http://java.sun.com/developer/technicalArticles/Networking/HotSpot/inlining.html

В наши дни при разработке программного обеспечения есть о чем беспокоиться.Отправь это приложение!

3 голосов
/ 24 января 2012

Каждый вложенный вызов займет другую позицию в стеке вызовов. Поскольку в методах вы больше ничего не делаете, это составляет большую часть «стоимости» вызова ваших методов, поэтому это будет иметь значение.

Совершенно немыслимая разница для пользователя, но, тем не менее, разница.

...