Kürzlich habe ich festgestellt, dass das Deklarieren eines Arrays mit 64 Elementen viel schneller (> 1000-fach) ist als das Deklarieren des gleichen Array-Typs mit 65 Elementen.
Hier ist der Code, mit dem ich das getestet habe:
public class Tests{
public static void main(String args[]){
double start = System.nanoTime();
int job = 100000000;//100 million
for(int i = 0; i < job; i++){
double[] test = new double[64];
}
double end = System.nanoTime();
System.out.println("Total runtime = " + (end-start)/1000000 + " ms");
}
}
Dies läuft in etwa 6 ms, wenn ich ersetzen new double[64]mit new double[65]ihm ca. 7 Sekunden dauert. Dieses Problem wird exponentiell schwerwiegender, wenn der Job auf immer mehr Threads verteilt wird, von denen mein Problem stammt.
Dieses Problem tritt auch bei verschiedenen Arten von Arrays wie int[65]oder auf String[65]. Dieses Problem tritt bei großen Zeichenfolgen nicht auf: String test = "many characters";tritt jedoch auf, wenn dies in geändert wirdString test = i + "";
Ich habe mich gefragt, warum dies der Fall ist und ob es möglich ist, dieses Problem zu umgehen.
byteanstelle von ausführe double.
System.nanoTime()sollteSystem.currentTimeMillis()für das Benchmarking vorgezogen werden .