Java - вызов статических методов против ручного встраивания - накладные расходы на производительность

Меня интересует, нужно ли вручную встраивать небольшие методы, которые вызываются 100k - 1 миллион раз в каком-либо алгоритме, чувствительном к производительности.

Во-первых, я думал, что, не встраивая, я несу некоторые накладные расходы, поскольку JVM должна будет определить, нужно ли встроить этот метод (или даже не сделать это).

Однако на днях я заменил этот встроенный вручную код вызовом статических методов и увидел повышение производительности. Как такое возможно? Означает ли это, что накладных расходов на самом деле нет и что включение JVM «по ее желанию» на самом деле повышает производительность? Или это сильно зависит от платформы / архитектуры?

(Примером, в котором произошло повышение производительности, была замена подкачки массива ( int t = a [i]; a [i] = a [j]; a [ j] = t; ) с вызовом статического метода swap (int [] a, int i, int j) . Другой пример, в котором не было разницы в производительности, - это когда я вставил 10- liner, который был вызван 1000000 раз.)

12
задан eold 11 February 2011 в 14:25
поделиться