- - PR -
static修飾子は多用するべきか
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-12-16 14:50
staticフィールドは速いよ。
| ||||||||
|
投稿日時: 2005-12-16 17:40
それで思い出したのですが,staticに関してもうひとつ疑問があります ローカルなスタティックを使うことで通常再入可能では無いが(javaにはfinalは あっても定数は無いのでおそらく)高速なメソッドを作れますよね 必ずしもメソッドがスレッドセーフであることが要求されないことを考えると ローカルなスタティック変数ってあってもよさそうだけど,実際無いのは 何故かなって思うんですが(もしかしてあるのかも知れないが確かエラーになったような 気がします) | ||||||||
|
投稿日時: 2005-12-16 18:02
CGが発生するとVM内で動的にアドレスが変わってしまうので、ローカル変数へのポインタを固定するのが難しいからではないでしょうかね。
| ||||||||
|
投稿日時: 2005-12-16 18:52
>定義するクラス:固定名のファイルの内容を取得して保持しておき、要求に応じて情報を提供するクラス
>呼び出し元:同時進行が予想される複数のスレッド(スレッド数不定) まさに皆さんおっしゃっている、シングルトンで良いんじゃないんでしょうか。 | ||||||||
|
投稿日時: 2005-12-16 18:53
JDK1.1の頃の話でしょうか。 テストしてみましたが、インスタンスのフィールドアクセスと クラスのフィールドアクセスの速度に殆ど差がありません。(JDK5.0) 現在のJVMでは最適化が行われていますし、 小手先の技ではむしろ最適化の邪魔になるケースもあるそうです。 検証コード(汚いですが・・・)
| ||||||||
|
投稿日時: 2005-12-17 00:28
そういえば、このまえ StringBuffer よりも String を使用したほうが速いという話をどこかで聞きました。従来、String よりも StringBuffer のほうが高速である、というのが定説でした。ところが、J2SE 5.0 の最適化では String は StringBuilder と同等のコードに置き換えられるため、同期不要な分だけ StringBuffer よりも速くなる可能性があるということでした。StringBuilder のインスタンス生成コストがあるので常に StringBuffer より速くなるわけではありませんが、速くなることもあると。 気にせずに String の連結をしまくってきた私は勝ち組ですね。 | ||||||||
|
投稿日時: 2005-12-17 00:41
速度だのメモリの節約だの、仕様書に規定があるの?
実装の結果、ぶっちゃけ偶然の産物じゃないのかよ。 staticの多態性にしたって、 それを可能にすることによって、オブジェクト指向に どんな貢献や混乱をもたらすか、全く触れられてない。 少なくとも、Jun氏はSingletonのなんたるかを理解してはいらっしゃらなさそうだ。 [ メッセージ編集済み 編集者: さいくろう 編集日時 2005-12-17 02:14 ] | ||||||||
|
投稿日時: 2005-12-17 02:22
staticは概念にもとづいて使うべきでしょ?
概念的に合っているなら使えばいいし、合ってないなら使っちゃだめ。 |