Android Stringのオブジェクト常駐例分析


本論文の例は、Android Stringのオブジェクトの存在を分析する。皆さんに参考にしてあげます。具体的には以下の通りです。
String a=「abc」
String b="abc"
a==b     true;
変数aと変数bは同じ値です。これは二人の値が同じというだけではなく、同じ文字列のオブジェクトです。Javaで言えばa=bの結果はtrueです。しかし、これは文字列と小さな整数またはロング整数にのみ有効です。他のオブジェクトは存在しません。つまり、もしあなたが二つのオブジェクトを作ったら、彼らの値は同じです。しかし、彼らは同じオブジェクトではありません。この問題は時にはとても嫌なことがあって、特にあなたがある長期化の記憶の中から1つの対象を取り出す時。同じ相手が二回も取れば、最後に取り出したいのは同じ対象ですが、実際にはコピーを二枚取り出しました。言い換えれば、あなたが望むのは、メモリの中にあるオブジェクトのコピーを取り出すことです。いくつかの記憶層はこのような処理をする。例えばJPAの実現はこのモードに従うことです。他の場合は自分でキャッシュをしなければならないかもしれません。
どのように自分の対象を、上のstringのようにするか?次の種類を使いましょう。

import java.lang.ref.WeakReference;
import java.util.WeakHashMap;
class WeakPool<T> {
  private final WeakHashMap<T, WeakReference<T>> pool = new WeakHashMap<T, WeakReference<T>>();
  public T get(T object) {
    final T res;
    WeakReference<T> ref = pool.get(object);
    if (ref != null) {
      res = ref.get();
    } else {
      res = null;
    }
    return res;
  }
  public void put(T object) {
    pool.put(object, new WeakReference<T>(object));
  }
}

ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。