Nein, Sie sparen keinen Platz.
Wenn eine JVM * autoboxes ein boolean
es Boolean.valueOf(boolean)
Anrufe, die entweder Boolean.TRUE
oder Boolean.FALSE
kehrt die static final Boolean
Felder sind. Es wird keine neue Boolean
Instanz erstellt. Als solches ist die von Ihnen definierte PLACEHOLDER
in der Tat eine Referenz auf Boolean.TRUE
und ist redundant.
Außerdem würde ich nicht Guava die Verwendung Cache
für eine LRU es sei denn, ich bin bereit, die Tatsache zu akzeptieren, dass „der Cache einen Eintrag vertreiben kann, weil es wurde vor kurzem oder sehr oft nicht verwendet“ (CacheBuilder.maximumSize(long), Schwerpunkt hinzugefügt).
Wenn Sie ein Straight-up LRU möchten, können Sie Collections.newSetFromMap(Map)
mit LinkedHashMap
verwenden:
Set<String> cache = Collections.newSetFromMap(new LinkedHashMap<String, Boolean>() {
@Override
protected boolean removeEldestEntry(Map.Entry<String, Boolean> eldest) {
return size() > MAX_ENTRIES;
}
});
Wo Sie MAX_ENTRIES
definieren.
* Hinweis: Theoretisch einige JVM-Implementierung (en) könnte es da draußen, die nicht Boolean.valueOf(boolean)
nennen (oder etwas ähnliches) zur Laufzeit, wenn boolean
Primitiven Autoboxing, aber wenn eine solche Implementierung Ich bin existiert ziemlich sicher, dass Sie benutze es nicht und das sehr wenige, wenn irgendwelche Individuen sind. Von Boolean(boolean)
:
Hinweis: Es ist selten angebracht, diesen Konstruktor zu verwenden. Wenn keine neue Instanz erforderlich ist, ist die statische Fabrik valueOf(boolean)
im Allgemeinen eine bessere Wahl. Es wird wahrscheinlich eine wesentlich bessere Raum- und Zeitleistung ergeben.
Danke für die ausführliche Antwort. Also, ich denke, ich verschwenden Platz für die Referenz PLACEHOLDER. Es ist in Ordnung für mich, Guavas Cache. Kann ich anstelle von 'true' oder' false' mehr Speicherplatz mit einem anderen Objekttyp speichern? – theeminence
@theemince Guava Cache ist schon ziemlich Platz minimal. Mir sind keine Möglichkeiten bekannt, den Speicher weiter zu reduzieren. – mfulton26