1

interface方法が1つしかないものを考えてみましょう。

Object getValue(String data);

Stringこれがaから他のデータ型へのデータ変換を説明していると仮定します(変換が有効であると仮定します)。テキストコンテキストからのデータの場合、同じデータ型の列が複数ある可能性があるため、同じデータトランスフォーマーの複数のインスタンスが存在します。

ずっと前に、同じオブジェクトの複数のインスタンスを持つ代わりに、これらのインスタンスをキャッシュするコードを記述していました。

private HashMap<Class<? extends T>, T> map;

public synchronized T getInstance(Class<? extends T> type) throws IllegalArgumentException
{
  T instance = map.get(type);
  if (instance == null)
  {
    try
    {
      instance = type.newInstance();
    }
    catch (Exception ex)
    {
      throw new IllegalArgumentException("The provided class cannot be instantiated: "
              + type.getName() + "\n" + ex);
    }
    map.put(type, instance);
  }
  return instance;
}

これらのクラスには状態がないため、単一の共有インスタンスが行う場合に同じクラスのインスタンスを多数持つことは、当時は無駄に思えました。

ただし、同じオブジェクトの複数のインスタンスを持つよりも、マッピングを維持する方がオーバーヘッドが高くなる可能性があります(単一のインスタンスを共有できる場合でも)。つまり、複数のインスタンスがありますが、メソッドコードは一度だけメモリに配置されますよね?したがって、私の考えでは、JVMは効果的にキャッシュを保持しています。

その件について何か考えはありますか?シングルトンインスタンスキャッシュアプ​​ローチの方が優れているでしょうか?

私の投稿を読んでいただきありがとうございます。

4

1 に答える 1

0

を使用するたびnewに、ヒープに割り当てられる新しいオブジェクトインスタンスを作成します。もちろん、実行可能コードは、共有インスタンスのみであるクラスに属しています。

とにかく、テキストから、オブジェクトには状態がなく、追加のデータを使用せずにStringパラメーターを変換しているだけです。それを考えると、私は方法に行きstaticます。

于 2012-08-12T15:55:57.250 に答える