6

Javaでスレッドの概念を扱っていたとき、Thread.javaソースファイルを見ました。setName()メソッドが文字列をという名前の文字配列に割り当てるときに気づきました"name[]"。Javaには文字列データ型の機能があり、なぜ文字配列を使用しているのですか。

ソースファイルでは、次のように初期化されます。

private char name[]; // why not "private String name;"

setName()方法では、

public final void setName(String name) {
    checkAccess();
    this.name = name.toCharArray();
    }

私を助けてください。前もって感謝します。

4

2 に答える 2

9

この名前はネイティブ コードからアクセスされるため、Java 型でマングルするよりも char 配列を処理する方が簡単です。core-lib-devs少し前にメーリング リストでこの質問が議論されました。スレッドからの 1 つのメールへのリンクを次に示します元の質問では、「その Thread.setName 呼び出しにかなりの時間がかかりますが、そのかなりの部分は、新しい文字の割り当てや文字配列のコピーなどを行うことであると考えています」 . 答えの一部を引用:

2002 年後半に、この方法に関する RFE がありました。

4745629 (スレッド) Thread.setName が不要な文字列割り当てを行う (char[] を使用しないでください)

2002 年の最初の評価では、次のように述べられています。

「これが実際のプログラムのパフォーマンスに深刻な影響を与えるとは想像できません。さらに、このクラスと VM との密接な関係により、Thread のフィールドを変更することは問題があります。いくつかのスレッド コードのクリーンアップの。」

その後、2005 年に「修正しない」として閉鎖されました。

「JVM では名前表現が char 配列であるという依存関係があり、この RFE は丁重に拒否する必要があります。」

于 2012-05-02T11:03:18.030 に答える
4

これは歴史的な遺物である可能性が最も高いと思います。つまり、もはや関係のない理由でずっと前に行われたことです。

Curtisk のコメントが示すように、これを修正することが提案されています。しかし、修正を行うための努力が利益を上回っているため、アイデアが脇に置かれているように聞こえます。そして、この異常を修正する利点がごくわずかであることは明らかです...実際の作業をほとんど行わない多くのスレッドを作成していない限り。

RFE (4745629) は Google には表示されなくなりましたが、David Holmes @ Oracle によるこのメーリング リストへの投稿はそれを参照しています。

Xiaobin Lu は、08/11/10 08:07 に次のように述べています。

お返事をありがとうございます。多くのエンタープライズ アプリケーション (私が働いているものなど) では、その Thread.setName 呼び出しにかなりの時間がかかりますが、そのかなりの部分は、新しい char の割り当てや char 配列のコピーなどを行うことだと思います。そのフィールドを効率的に格納する方法について考え直す必要があります。

2002 年後半に、この方法に関する RFE がありました。

4745629 (スレッド) Thread.setName が不要な文字列割り当てを行う (char[] を使用しないでください)

2002 年の最初の評価では、次のように述べられています。

「これが実際のプログラムのパフォーマンスに深刻な影響を与えるとは想像できません。さらに、このクラスと VM との密接な関係により、Thread のフィールドを変更することは問題があります。いくつかのスレッド コードのクリーンアップの。」

その後、2005 年に「修正しない」として閉鎖されました。

「JVM では名前表現が char 配列であるという依存関係があり、この RFE は丁重に拒否する必要があります。」


ご存知のように、VM と Java コードの両方を変更することは、調整するのが非常に面倒なので、これを裏付ける何らかの説得力のあるパフォーマンスの証拠が必要です (変更可能であると仮定して)。個人的には、上記の最初の eval に同意します。 setName が全体的なパフォーマンスに影響を与えている場合、スレッドは実際の作業をあまり行うことができず、あまりにも多くのスレッドを作成しているように見えます。これが発生するコンテキスト。

于 2012-05-02T11:22:15.760 に答える