Являются ли статические вызовы Java более или менее дорогими, чем нестатические вызовы? - PullRequest
76 голосов
/ 27 сентября 2010

Есть ли какой-либо выигрыш в производительности, так или иначе? Это специфично для компилятора / виртуальной машины? Я использую Hotspot.

Ответы [ 12 ]

0 голосов
/ 27 сентября 2010

Как отмечает Джон, статические методы не могут быть переопределены, поэтому просто , вызывающий , статический метод может - в достаточно наивной среде выполнения Java - быстрее, чем , вызывая экземпляр способ.

Но тогда, даже если предположить, что вы находитесь в той точке, где вам нужно испортить свой дизайн, чтобы сэкономить несколько наносекунд, это просто поднимает другой вопрос: вам нужен метод, переопределяющий себя? Если вы измените свой код так, чтобы превратить метод экземпляра в статический метод, чтобы сэкономить наносекунду здесь и там, а затем развернуться и реализовать свой собственный диспетчер, то ваш почти наверняка будет менее эффективным, чем построенный уже во время выполнения Java.

0 голосов
/ 27 сентября 2010

Теоретически дешевле.

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

Однако я не проверял это.

...