Я проверил этот вопрос на моей машине, разница была около 2-4ms более 10000 экземпляров, я проверил все такие вещи, как, если вы создаете и присвоить значение:
int i=0;
в сравнении с:
int i;
i=0;
вот код, который я использовал для тестирования, конечно, я изменил его для тестирования, и есть первоначальный эффект балансировки, прежде чем машина достигает оптимизацию, вы можете увидеть, что в ясно, как только вы проверить:
package initializer;
public final class EfficiencyTests {
private static class Stoper {
private long initTime;
private long executionDuration;
public Stoper() {
// TODO Auto-generated constructor stub
}
private void start() {
initTime = System.nanoTime();
}
private void stop() {
executionDuration = System.nanoTime() - initTime;
}
@Override
public String toString() {
return executionDuration + " nanos";
}
}
private static Stoper stoper = new Stoper();
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
theCycleOfAForLoop(100000);
theCycleOfAForLoopWithACallToSize(100000);
howLongDoesItTakeToSetValueToAVariable(100000);
howLongDoesItTakeToDefineAVariable(100000);
System.out.println("\n");
}
}
private static void theCycleOfAForLoop(int loops) {
stoper.start();
for (int i = 0; i < loops; i++);
stoper.stop();
System.out.println("The average duration of 10 cycles of an empty 'for' loop over " + loops + " iterations is: " + stoper.executionDuration * 10/loops);
}
private static void theCycleOfAForLoopWithACallToSize(int loops) {
ArrayList<Object> objects=new ArrayList<Object>();
for (int i = 0; i < loops; i++)
objects.add(new Object());
stoper.start();
for (int i = 0; i < objects.size(); i++);
stoper.stop();
System.out.println("The average duration of 10 cycles of an empty 'for' loop with call to size over " + loops + " iterations is: " + stoper.executionDuration * 10/loops);
}
private static void howLongDoesItTakeToSetValueToAVariable(int loops) {
int value = 0;
stoper.start();
for (int i = 0; i < loops; i++) {
value = 2;
}
stoper.stop();
System.out.println("The average duration of 10 cycles of setting a variable to a constant over " + loops + " iterations is: " + stoper.executionDuration * 10/loops);
}
private static void howLongDoesItTakeToDefineAVariable(int loops) {
stoper.start();
for (int i = 0; i < loops; i++) {
int value = 0;
}
stoper.stop();
System.out.println("The average duration of 10 cycles of initializing and setting a variable to a constant over " + loops + " iterations is: " + stoper.executionDuration * 10/loops);
}
private static void runAForLoopOnAnArrayOfObjects() {
// TODO Auto-generated method stub
}}
вы можете получить, сколько времени займет один, если вы уменьшаете время другого ... (если вы понимаете, что я имею в виду)
надеюсь, что это сэкономит вам время.
вещь, которую вам нужно понять, это то, что я проверил это, чтобы оптимизировать мой цикл обновления краски на моей платформе, и это помогло. Адам.
Неправильно. Попробуйте два из них подряд и сравните байт-код. – EJP
Байт-код не имеет значения. Это то, что JIT оптимизирует в машинный код, который имеет значение. – bmargulies