これは歴史的な遺物である可能性が最も高いと思います。つまり、もはや関係のない理由でずっと前に行われたことです。
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 が全体的なパフォーマンスに影響を与えている場合、スレッドは実際の作業をあまり行うことができず、あまりにも多くのスレッドを作成しているように見えます。これが発生するコンテキスト。