Ich habe mal nachgeschaut. Ich bin ein bisschen verwirrt. Bei mir hat der SourceOrdner nur ca 18. mb. Das erscheint mir sehr wenig. Ich habe versucht. da ich ja System.arraycopy nachschauen möchte, nach einem ordner System (wie die Bezeichnung der der Klasse) gesucht. Jedoch Weiß auch dort nicht, wie ich effizient suchen könnte..
Der folgende Source habe ich über etwas googlen gefunden, da hat jemand einen Performancetest für die Methode geschrieben.
Quelle: System.arraycopy speed
Java:
/**
* Benchmarks System.arraycopy() vs. a for loop
* Expects as command line arguments paris of array size and
* number of repetitions of the benchmark.
*
* @author Michael Borgwardt
*/publicclassCopyTest{staticbyte[] in;staticbyte[] out;publicstaticvoidmain(String[] args){try{for(int n=0; n<args.length/2; n++){int size =Integer.parseInt(args[n*2]);int iterations =Integer.parseInt(args[n*2+1]);
in =newbyte[size];
out =newbyte[size];long arraycopyTime =0;long loopcopyTime =0;long before =System.currentTimeMillis();for(int i=0; i<iterations; i++){System.arraycopy(in,0, out,0, size);}
arraycopyTime =System.currentTimeMillis()- before;
before =System.currentTimeMillis();for(int i=0; i<iterations; i++){for(int j=0; j<in.length; j++){
out[j]= in[j];}}
loopcopyTime =System.currentTimeMillis()- before;System.out.println("Array size: "+size+", Repetitions: "+iterations);System.out.println("Loop: "+loopcopyTime +"ms, System.arrayCopy:"+arraycopyTime+"ms");}}catch(Exception e){
e.printStackTrace();}}}
Aufgerufen mit diesen Args: 50 10000 500 10000 5000 10000 50000 10000 500000 10000
bekam ich folgende Ausgabe:
Wie man sieht ist die ArrayCopy insbesondere bei großen Arrays wesentlich performanter.
Die Begründung der Aufgabe liegt also in der nativen implementierung der Methode, da man hier nicht mehr auf Java-Operationen beschränkt ist kann man andere Speichernähere implementierungen verwenden, ein Beispiel dazu findest du auch hier: System.arraycopy() Article for Martin Rinehart's Mug of Java
Gruß
die klasse heißt System. da sie wahrscheinlich eine public class ist, heißt das File System.java....
Die klasse befindet sich im package java.lang --> im Ordner lang nachschauen
arraycopy landet sowieso seit einer bestimmten Java-Version in einer nativen Methode, d.h. sie ist nicht mit Java implementiert. Das ist allerdings nicht bei allen Klassen/Methoden so. An Sourcen der Sun-Klassen kommst Du nur schwer, da Java hier nicht open-source ist. Da helfen aber z.B, die open-JDK Sourcen. Ich glaube Sun-Sourcen alter JVM's von Sun wurden früher schonmal veröffentlicht.