В сообщениях leonm это, вероятно, проблема JIT-компилятора.
JIT-компилятор работает с вашим скомпилированным Java-кодом (байт-кодом), а когда часто вызывается некоторая часть кода, он преобразуется в двоичный (машинный) код, который даже быстрее интерпретируемого байт-кода.
Байт-код, который выбирается для преобразования в двоичный код, может определяться несколькими правилами.Некоторые из правил заключаются в том, что ваш код находится в отдельных очень коротких методах и код внутри циклов.
Проблема этой проблемы в том, что короткие методы обычно имеют право переводить намного раньше, чем встроенный код в какой-то более крупный фрагмент кода или метода,Особенно если петли нет или вызывается редко.
Не забывайте, что если вы дублируете один и тот же встроенный код в нескольких местах, он JIT-компилируется отдельно, а сокращенный общий метод переводится преимущественно.
Если вы отключите JIT-компилятор, тогда виртуальная машина javaСкомпилируйте все ваше приложение в двоичный код на этапе запуска, и тогда не должно иметь значения, вызываете ли вы некоторые функциональные возможности с помощью метода или как прямой встроенный код.
Если вы хотите проверить производительность даже с включенным JIT-компилятором, вам следует выполнить теплыйфаза перед тестированием.Эта разминка указывает компилятору JIT, что некоторый фрагмент кода вызывается часто, и компилятор переводит его в двоичный код на заднем плане.
Код прогрева может выглядеть так:
public void testSetPixel() {
// warm up
for (int i=0; i < 1000; i++) {
setPixel(i, i, 10);
}
// your regular testing code with testing setPixel(int, int, int) method
...
}