# Java- Source Code



## hallosiepost (16. Apr 2011)

Hallo,

Wie ist es möglich den Java Source-Code bestimmter Methoden anzusehen? Ich möchte mir ansehen, wie System.arraycopy(...) implementiert wurde.

Viele Grüße,

Tristan


----------



## Volvagia (16. Apr 2011)

Java Platform, Standard Edition 6u23 Source Snapshot Releases
Besonders viel gibt es da aber nicht zu sehen, ist nativ.


----------



## Final_Striker (16. Apr 2011)

In dem JDK-Verzeichnis auf deinem PC befindet sich eine src.zip Datei. In dem Archiv findest du alle Java-Klassen als .java Dateien.


----------



## hallosiepost (17. Apr 2011)

Volvagia hat gesagt.:


> Java Platform, Standard Edition 6u23 Source Snapshot Releases
> Besonders viel gibt es da aber nicht zu sehen, ist nativ.



Ich habe es schon installiert. Ich habe nichts, wo man es auf der Seite lesen könnte, bzw. wo ich dort suchen muss.


----------



## hallosiepost (17. Apr 2011)

Final_Striker hat gesagt.:


> In dem JDK-Verzeichnis auf deinem PC befindet sich eine src.zip Datei. In dem Archiv findest du alle Java-Klassen als .java Dateien.



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..

Trotzdem Danke für die Hinweise,

Viele Grüße,

Tristan


----------



## Volvagia (17. Apr 2011)

http://www.java.net/download/jdk6/6u23/promoted/b05/jdk-6u23-fcs-src-b05-jrl-12_nov_2010.jar


----------



## Firephoenix (17. Apr 2011)

Hi,
Ich bin mir recht sicher, dass ich sogar weiß zu welchem Aufgabenblatt die Fragestellung gehört 
Aufgabe 4 b) oder?

Wie schon gesagt, selbst wenn du in den Java-Source schaust landest du am Ende da:

```
public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);
```


Der folgende Source habe ich über etwas googlen gefunden, da hat jemand einen Performancetest für die Methode geschrieben.
Quelle:
System.arraycopy speed

```
/**
 * 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
 */
public class CopyTest
{
	static byte[] in;
	static byte[] out;

	public static void main(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 = new byte[size];
				out = new byte[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:


> Array size: 50, Repetitions: 10000
> Loop: 7ms, System.arrayCopy:1ms
> Array size: 500, Repetitions: 10000
> Loop: 42ms, System.arrayCopy:1ms
> ...


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ß


----------



## Simon_Flagg (18. Apr 2011)

hallosiepost hat gesagt.:


> nach einem ordner System (wie die Bezeichnung der der Klasse) gesucht. Jedoch Weiß auch dort nicht, wie ich effizient suchen könnte..



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

lg


----------



## fastjack (18. Apr 2011)

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.


----------

