подвергается ли получатель Java снижению производительности - PullRequest
5 голосов
/ 06 апреля 2010

если у меня есть код

int getA(){
 return a;
}

и затем сделайте что-то вроде

int b = obj.getA();

вместо

int b = obj.a;

будет ли это означать, что стек придется толкать и выталкивать, в конечном итоге замедляя мой код?

Ответы [ 3 ]

4 голосов
/ 06 апреля 2010

JIT-компилятор встроит метод.

Код должен выглядеть как

int b = obj.GetA();
3 голосов
/ 06 апреля 2010

У меня есть два ответа для вас:

  1. Я не думаю, что существует существенное снижение производительности за использование метода получения и доступа к переменной напрямую. Я бы больше беспокоился о том, насколько понятен и читаем код, чем производительность для такого рода решений.
  2. В соответствии с принципами проектирования ОО, которые могут или не могут быть важными для вас, вы обычно скрываете данные и предоставляете метод получения, чтобы получить к ним доступ - подробное обсуждение достоинств этого подхода здесь .
1 голос
/ 06 апреля 2010

Теоретически существует некоторый штраф во время выполнения из-за вызова метода. На самом деле это мало влияет на общую производительность по двум причинам:

  1. Если только obj.getA() не происходит внутри самого внутреннего цикла вашей программы, его влияние на общую производительность вашего кода будет незначительным. Когда производительность является проблемой, вы должны учитывать узкое место вашего кода. Нет смысла оптимизировать код, которого нет в этих горячих точках. Чтобы идентифицировать эти места, вам нужно проанализировать выполнение вашего кода с помощью profiler .
  2. Как говорил @Michael, JVM использует компилятор / оптимизатор Just In Time, который вставляет код на основе фактического выполнения. Он выполняет только этот вид оптимизации (см. talk )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...