Failure Sharing

Bootup your energy with sharing failure.

読書感想:Java Performance Story in Korean language (Chapter 5 ~ 9)

05. Loopについて

  1. if文自体は、あんまり時間がかからない。

  2. 数字を比較する場合、switchの方が可読性が良い。(小さい方から大きい方にした方が一番早い)

  3. whileは無限ループになる恐れがあるので、なるべくfor文を使う。

  4. いらない呼び出しを、処理から外す。( list.size())

for (int loop=0; loop < list.size(); loop++)
  1. ForEach文は楽だが、インデックスを逆にしたり、特定の値を確認したりすることは不可能。

06. static

  1. staticはGCの対象にならないので、注意 ArrayListとかVectorをstaticにする場合、要注意

  2. 色々なスレッドからアクセスされる時、一つの変数に多くのアクセスがきたら、整合性に問題が発生する恐れがある。

  3. よく使って、絶対変わらない変数は「final static」 例えば、クエリ。

  4. 設定ファイル情報もstaticとして管理

  5. コード型データは、DBから一回だけ読むこと。

  6. Memory Leakは、jmapで確認できる。

後ほど確認!

07. Reflection 省略

08. synchronized

  1. synchronizedが無条件安定してるとは限らない。性能に影響を及ぼすことがある。

  2. Process : Threadは、1:多の関係

  3. Thread is same with 'Lightweight Process(LWP)'

  4. synchronizedは、一つのオブジェクトに多数のスレッドが同時にアクセスしてくる時使う。「ゆっくり一人ずつ来い!」 (staticの変数に多数のスレッドがアクセスしてくる時にも使う。) → 必要のないところに使うと、逆に性能が悪くなる。(ま、当たり前か。)

  5. 使用例

public synchronized void sampleMethod() {}

private Object obj = new Object();
public void sampleBlock() {
    synchronized(obj) {
    }
}

09. IO時のボトルネック

  1. IOは、性能に一番影響を及ぼす。

  2. FileReaderクラスは、文字列単位でファイルを読むので、すごい能率が悪い。 → BufferedReaderを使うと、ライン単位をサポートするreadLine()メソッドが使える。

  3. NIOがIOボトルネックの答えになることがある。 NIOってなに?