Java Systemクラスの実装


8

Java Systemクラスには、さまざまなデータメンバーとそこに存在するのに最適なメソッドが含まれています。例えば:

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

など、しかし、私がそこにいることを理解していない方法があります:

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

1つの配列を別の配列にコピーすると、Arraysクラスに属しているように感じます。ドキュメントから以下:

このクラスには、配列を操作するためのさまざまなメソッド(ソートや検索など)が含まれています。このクラスには、配列をリストとして表示できる静的ファクトリーも含まれています。

配列を操作する方法は、この結論を私に指摘するものです。ある配列を別の配列にコピーすることは、確かに配列操作ですよね?

私の質問はそう:なぜあるarraycopy()System

初期のJava Systemクラス実装の遺物ですか?このメソッドは非推奨としてマークされていないため、少し迷っています。さらに、JavaのcamelCase標準に準拠していないため、初期のライブラリ設計の遺物であるという考えに立ち返ります。


おそらくそれを置くのに適した場所がなかったので、今ではそれを移動するには遅すぎます。
user253751 2015年

回答:


8

System.arraycopy各JVMによってネイティブに実装されます。メソッド宣言は次のとおりです。

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

これは、ネイティブアセンブリ命令で可能な最速の方法で配列コピーを行うことを意味します。これは、Javaがこの動作を低レベルで提供するために、これは一般的に必要とされる潜在的に遅い機能であるという考え方です。

配列をコピーする他の方法は、ラップするかSystem.arraycopy、解釈されたループを使用するため、パフォーマンスが低下します。


さて、これは少し意味があります。各JVMに独自の実装があることを知りませんでした。とはいえ、すべての nativeメソッドは含まれていSystemますか?命名規則によって、システムに依存しますが、組織の観点からarraycopyは、Arrayクラスまたは同様のもので定義され、そこにネイティブ実装があるため、それは一種の理にかなっています。個人的にはarraycopy、5年間のプログラミングで1回だけ使用しました。
Chris Cirefice

5
後方互換性の理由からまだ残っています。また、すべてのnativeメソッドがにSystemあるわけではありませんが、にはnativeメソッドがありませんjava.util.Arrays
durron597 2015年

ええと、それで私が抱えていた質問は解決されました。ありがとうございます。
Chris Cirefice 2015年

4

初期のJava Systemクラス実装の遺物ですか?

System.arraycopyはライブラリの最も古い部分の1つですが、java.util.Arraysは1.2で追加されました。直接それを置き換えるものはなく、配列のさまざまなコピーメソッドが実装されているため、arraycopyを遺物とは呼びません。

システムまたは配列について、ネイティブメソッドを1つに含める必要がある、または他のメソッドに含まれないようにする特別なことはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.