3

相関の使用例:

read input 

if (correlation-id is already generated for this input) 
{ 
   lookup the correlation-id from the cache; 
   return correlation-id; 
} 

else 
{ 
   generate the correlation-id; 
   cache it; 
   return correlation-id; 
} 

制約: - 入力レコードの数は 500K までになる可能性があるため、強い参照を使用したくありません。- 今のところ、一方向ハッシュを生成したくありません (一方向ハッシュを使用する場合、キャッシュする必要がないことはわかっています)

これに ComputingMap を使用する方法を教えてください。javadoc に「弱い/ソフトキーに同一性を使用する」というメモがあるため、私はこれを求めています。

4

1 に答える 1

3

Google Guava/Collection クラスとソフトまたは弱いキーまたは値を使用すると、キーは、キャッシュされた値を検索するために == ではなく equals() を使用するマップの強力な参照である必要があります。弱い/ソフト キーがある場合、検索は ID で行われるため、常にキャッシュ ミスが発生します。したがって、ガベージ コレクターにキャッシュからアイテムを GC させたい場合は、値をソフトまたはウィークにする必要があります。

将来、Google が等価機能を追加することを理解しています。そのため、equals() または == が必要かどうかを指定し、強い参照、弱い参照、または弱い参照を選択してこの選択を行わないようにすることができます。

Tuple オブジェクトは equals() と hashCode() を実装しているので、次のようにします。

new MapMaker()
    .softValues()
    .makeComputingMap(new Function<Tuple,String>() {
                                         public String apply(Tuple t) {
                                             // generate the correlation-id
                                         }
                                    });
于 2010-01-15T01:11:05.543 に答える