Implementierung der Java System-Klasse

8

Die Java- SystemKlasse enthält verschiedene Datenelemente und Methoden, die durchaus sinnvoll sind. Zum Beispiel:

System.in (variable)
System.err (variable)
System.out (variable)
System.exit(int)
System.gc()
System.getSecurityManager()

usw. Es gibt jedoch eine Methode, die ich nicht verstehe:

System.arraycopy(Object, int, Object, int int)

Das Kopieren eines Arrays in ein anderes fühlt sich für mich so an, als würde es in die ArraysKlasse gehören. Folgendes aus der Dokumentation:

Diese Klasse enthält verschiedene Methoden zum Bearbeiten von Arrays (z. B. Sortieren und Suchen). Diese Klasse enthält auch eine statische Factory, mit der Arrays als Listen angezeigt werden können.

Methoden für Arrays manipuliert wird , welche Punkte Sie mich zu diesem Schluss, wie das Kopieren einer Array zu einem anderen ist sicherlich Array Manipulation , nicht wahr?

Also meine Frage: Warum ist arraycopy()in System?

Ist es ein Relikt einer frühen Java- SystemKlassenimplementierung? Die Methode ist nicht als veraltet markiert, daher bin ich ein bisschen verloren. Darüber hinaus folgt es nicht dem Java-CamelCase-Standard, was mich zu meiner Annahme zurückbringt, dass es ein Relikt des frühen Bibliotheksdesigns ist.

Chris Cirefice
quelle
Wahrscheinlich, weil es früher keinen guten Platz gab, um es zu platzieren, und jetzt ist es zu spät, um es zu bewegen.
user253751

Antworten:

8

System.arraycopywird von jeder JVM nativ implementiert. Hier ist die Methodendeklaration:

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

Dies bedeutet, dass das Kopieren von Arrays in nativen Montageanweisungen so schnell wie möglich erfolgt. Die Idee ist, dass dies eine so häufig benötigte, möglicherweise langsame Funktionalität ist, dass Java dieses Verhalten auf einer niedrigen Ebene bereitstellen sollte.

Andere Möglichkeiten zum Kopieren von Arrays werden entweder umbrochen System.arraycopyoder interpretierte Schleifen verwendet, die nicht so performant wären.

durron597
quelle
Okay, das macht jetzt ein bisschen Sinn. Ich wusste nicht, dass jede JVM ihre eigene Implementierung hat. Das heißt, sind alle native Methoden in System? Durch die Benennung von Konventionen ist dies irgendwie sinnvoll, da sie systemabhängig sind , aber aus organisatorischer Sicht arraycopysinnvoll wäre, in der ArrayKlasse oder ähnlichem definiert zu werden und dort ihre native Implementierung zu haben. Persönlich habe ich arraycopyin meinen 5 Jahren Programmierung nur einmal verwendet .
Chris Cirefice
5
Es ist aus Gründen der Abwärtskompatibilität immer noch vorhanden. Auch wenn nicht alle nativeMethoden vorhanden sind System, sind keine nativeMethoden vorhanden java.util.Arrays.
Durron597
Ich verstehe, das klärt die Fragen, die ich hatte, danke!
Chris Cirefice
4

Ist es ein Relikt einer frühen Implementierung der Java System-Klasse?

System.arraycopy ist einer der ältesten Teile der Bibliothek, während java.util.Arrays in 1.2 hinzugefügt wurde. Ich würde Arraycopy nicht als Relikt bezeichnen, da es nichts gibt, das es direkt ersetzt, und die verschiedenen Kopiermethoden in Arrays sind in Bezug darauf implementiert.

Es gibt nichts Besonderes an System oder Arrays, für das native Methoden erforderlich sind oder das verhindert, dass sie sich in der anderen befinden.

Gatkin
quelle