Thread.javaの146行目で、私は著者がString
の代わりにchar[]
を名前フィールドに使用していることに気付きました。私が気づいていないパフォーマンス上の理由はありますか? getName()
は、文字を文字列にラップしてから名前を返します。 String
を使用するほうがいいですか?Stringの代わりにchar []を使用する理由は?
答えて
一般に、はい。私はchar[]
がパフォーマンス上の理由からThread
で使用されたと考えています。そのようなJavaの場合はまともなパフォーマンスを得るためにあらゆる努力が必要でした。現代のJVMの登場により、このようなマイクロ最適化はそれ以来重要ではなくなってきましたが、そのままにしています。
古いJava 1.0の時代のソースには奇妙なコードがたくさんありますが、あまり注意を払っていません。
私はこれも疑った。しかし、ThreadGorupで 'String name'を見た時、私は混乱しました。答えをありがとう。 –
私は多くの人々が本当に良い理由はないと示唆したので、私はこの答えを受け入れるつもりです。 –
文字列は不変なので、なぜそれを使用したのですか。効果的なJava 2end版では、「常に可能な限り文字列の代替を使用する」と書かれています。 –
難しいと言えます。おそらく彼らはいくつかの最適化を念頭に置いていました。おそらく、このコードを書いた人は、Cスタイルの文字列配列char*
にもっと慣れていたでしょうし、あるいはこのコードが書かれた時には文字列が不変かどうかわかりませんでした。しかし、このコードでは、Thread.getName()
が呼び出されるたびに新しいchar配列が作成されるので、このコードは文字列を使用するよりも実際にはGC上で重くなります。
+1これはGCに関するものです。 –
セキュリティ保護が理由だったのでしょうか?文字列はリフレクションで変更することができるため、著者は読み書き時にコピーを望んでいます。それをやっているなら、char配列を使って素早くコピーすることもできます。
- 1. queue.First()/ Last()の代わりにqueue.Peek()を使用する理由
- 2. guava:コンストラクタの代わりにメソッドcreate()を使用する理由
- 3. Date []の代わりにlong []を使用する理由
- 4. trueの代わりに!0を使用する理由はありますか?
- 5. XMLの代わりにSGMLを使用する理由はありますか?
- 6. [x]の代わりにoperator.itemgetter(x)を使用する理由は何ですか?
- 7. Singeltonパターンの代わりにZend_Registryを使う理由は?
- 8. データセット。代わりにクエリアダプタまたはテーブルアダプタを使用する理由
- 9. 実際の制限はchar配列の代わりにstd :: stringとstd :: vector/listをC++の配列の代わりに使用するだけですか?
- 10. asp.netがbigintの代わりにGUID列を使用する理由
- 11. CSSプロパティテーブルの代わりに浮動小数点数を使用する理由
- 12. ダイレクトメソッド呼び出しの代わりにカスタムイベントを使用する理由
- 13. IISの代わりにWaWebHostでWebRoleを実行する理由
- 14. IOErrorEvent.IO_ERRORの代わりにEvent.OPENをディスパッチする理由
- 15. TFilenameの代わりにStringを使用する必要がありますか?
- 16. Facebook PHP-SDKが$ _SESSIONの代わりに$ _COOKIEを使用する理由はありますか?
- 17. Pd拡張の代わりにバニラ純粋データを使用する理由はありますか?
- 18. ui:compositionの代わりにFaceletsルートとしてhtmlを使用する理由はありますか?
- 19. BSONの代わりにBEncodeを使用するBitTorrent KRPCの背後にある理由は何ですか?
- 20. 画像ソースにURLの代わりにstringを使用する方法
- 21. 不変オブジェクトのパブリックフィールドの代わりにゲッターを使う理由は?
- 22. string :: size_typeの代わりにint
- 23. Struts2フォームでsetId(String)の代わりにsetId(Long)を使用する
- 24. parseIntの代わりにビット演算子を使用しないのが良い理由はありますか?
- 25. トーストを使用する代わりに
- 26. HTTParty parsed_responseはハッシュの代わりにStringを返します
- 27. スキームstring-refとchar-whitespace?使用する
- 28. <xsd:enumeration>の代わりに<xsd:choice>を使用するスキーマがある理由
- 29. 1つのインデックスの代わりに別々のPHPページを使用する理由
- 30. //使用する代わりに、プロトコル://
文字列の呼び出し{getChars、getBytes、toLowerCase、...}はすべて、元の文字列のコピーである新しいオブジェクトを返します。大きな文字列を使ったり、これらのメソッドを何度も呼び出したりする場合。不要な追加のガベージコレクションが発生する可能性があります。たとえば、あらゆる拍にOutputStream.write(epochTimeString.getBytes())という何らかの理由でHTTPハートビートがあるとします。モバイルJVMを使用する場合は、これらの詳細をもっと頻繁に心配する必要があります。 – eSniff