Вопрос связан с памятью и основными характеристиками. Последние несколько дней я размышлял над этой темой, это не то, что мне нужно было использовать, просто любопытно. Я создал простой пример:Создание объектов и делегирование гораздо медленнее, чем один большой метод?
1) Один класс, который не использует делегирование и не имеет внутренних классов:
public class NoInnerClass {
public void theMethod(int times){
for(int i=0; i<times; i++){
System.out.println("No Inner hello: " + i);
}
}
}
2) Один класс, который вызывает четыре внутренних классов. Последний из них делает то же самое, как и в методе NoInnerClass theMethod
public class InnerMain {
private Inner1 inner1 = new Inner1();
public void theMethod(int times){
inner1.doIt(times);
}
}
...
public class Inner4 {
public void theMethod(int times){
for(int i=0; i<times; i++){
System.out.println("Inner 4 hello: " + i);
}
}
}
Я измерил разницу во времени в миллисекундах между этими двумя типами вызовов. Разница была не такой большой - чуть более одной миллисекунды. Но что, если у нас есть намного более сложные внутренние объекты и более делегирующие вызовы, мы наверняка имели бы большую разницу.
Так вопросы:
- Будет ли разница во времени и объема памяти, используемой между двумя подходами значительно увеличить
- Если да, то есть ли какие-нибудь статьи по этому поводу (я не мог найти много)
- Или, может быть, сегодняшняя JVM настолько умный, что мы не должны думать об этом
заранее спасибо за ваши ответы.
Это: «* Или, может быть, сегодняшняя JVM настолько умна, что мы не должны думать об этом». ... Очевидная оптимизация здесь будет методом inlining, который должен скомпилировать два кода по существу по тем же инструкциям .. Кстати, разница, которую вы обнаружите, может быть проблемой измерения, а не фактической разницей в производительности. – assylias
Исправить ваш отступ –
Разница - среднее число нескольких попыток. И спасибо за напоминание о встроенном коде :) – user3188414