Mi sono imbattuto in questo answer in SO in cui è menzionato che le raccolte di Google MapMaker sono fantastiche. Ho esaminato la documentazione ma non sono riuscito a capire dove posso usarlo. Può indicare uno solo degli scenari in cui sarebbe appropriato usare MapMaker.Uso di MapMaker di Google raccolte?
risposta
Ecco un rapido esempio di un modo che ho usato MapMaker
:
private final ConcurrentMap<Long, Foo> fooCache = new MapMaker()
.softValues()
.makeComputingMap(new Function<Long, Foo>() {
public Foo apply(Long id) {
return getFooFromServer(id);
}
});
public Foo getFoo(Long id) {
return fooCache.get(id);
}
Quando get(id)
viene chiamato sulla mappa, che sarà sia restituire la Foo
che è nella mappa per tale ID o' Lo recupererò dal server, lo metterà in cache e lo restituirà. Non devo pensarci una volta che è stato impostato. Inoltre, poiché ho impostato softValues()
, la cache non può riempirsi e causare problemi di memoria poiché il sistema è in grado di cancellare le voci da esso in risposta alle esigenze di memoria. Se un valore memorizzato nella cache viene cancellato dalla mappa, tuttavia, è sufficiente chiedere nuovamente al server la prossima volta che ne ha bisogno!
Il fatto è che questo è solo un modo in cui può essere utilizzato. L'opzione per fare in modo che la mappa utilizzi chiavi e/o valori forti, deboli o morbidi, oltre all'opzione di rimuovere le voci dopo un determinato periodo di tempo, ti consente di fare molte cose con esso.
Dovrebbe 'getFoo' e 'getFooFromServer' ha la stessa funzione qui? –
@Tom: No, perché quando viene chiamato 'fooCache.get (id)', verrà chiamata la 'Funzione' della mappa di calcolo se il valore non è nella cache. Se la 'Funzione' ha chiamato' getFoo' di nuovo, proverebbe ancora una volta a chiamare 'fooCache.get'. Detto questo, il codice per 'getFooFromServer()' potrebbe essere definito proprio all'interno di 'Funzione' invece che come metodo separato ... Ho appena usato un metodo con nome per chiarire cosa fa la funzione senza dover scrivere alcun falso effettivo codice per chiamare il server. – ColinD
Può essere d'aiuto se si guardano le descrizioni di SoftReference
e WeakReference
.
SoftReference
è molto utile per l'utilizzo in cache, in quanto verranno cancellati in modo specifico quando la memoria si sta esaurendo.
WeakReference
indica al Garbage Collector che può raccogliere l'oggetto a cui fa riferimento fino a quando non ci sono riferimenti validi altrove. Questo viene in genere utilizzato con elementi che possono essere rapidamente rivisti se necessario.
Quindi, considerare l'utilizzo di MapMaker per creare una ConcurrentMap con softValues per una cache e una con weakKeys per le tabelle di ricerca temporanee.
Modifica: softValues utilizza una politica LRU.
- 1. Motivo di progettazione MapMaker?
- 2. Utilizzo di MapMaker per creare una cache
- 3. Uso di 'map' con raccolte di dimensioni diverse nel clojure
- 4. Google Maps uso ambiguo di un GMSMapViewType
- 5. Google Cloud Storage JavaScript Uso
- 6. Uso di Hunch sul motore di Google App
- 7. Componente di pubblicazione script di Google Apps per uso interno
- 8. Creazione di Multimap debole con Google Collections
- 9. Raccolte di paging in Backbone.js
- 10. AutoMapper: mappatura di raccolte secondarie
- 11. Concatenazione di raccolte in PLSQL
- 12. .NET ha raccolte di icone?
- 13. NHibernate 4: uso della cache di secondo livello per le raccolte figlio a carico lento
- 14. uso di ricerca Solr (Lucene) su Google App Engine
- 15. Uso di tor e python per grattare Google Scholar
- 16. Uso selettivo della variabile "testo" nei caratteri di google chiamate
- 17. Uso dell'API JavaScript v3 di Google Maps nell'app iOS PhoneGap
- 18. Uso di .hide() e .show() con Google Visualization
- 19. Il modo migliore per l'inizializzazione statica di Maps nelle raccolte di google
- 20. Utilizzo di raccolte Backbone di grandi dimensioni
- 21. Google App Engine per uso privato?
- 22. Unione di due raccolte in MongoDB
- 23. Uso del servizio Google +1 senza JavaScript
- 24. Uso di sigaction()
- 25. c'è una stringa per mappare lo splitter nelle raccolte di google
- 26. Uso corretto di CIDetectorTracking
- 27. Uso di iteratori su indici di array
- 28. Programmazione di interfacce e raccolte sincronizzate
- 29. Libreria di raccolte primitive Java più efficiente
- 30. Registrazione di raccolte in Autofac 2.1.10 RC
Vedere: http://stackoverflow.com/questions/3617680/can-someone-explain-to-me-when-it-is-useful-to-use-mapmaker-or-weakhashmaps – ColinD