Если у вас уже есть такой класс InternPool
, лучше использовать его, чем выбирать другой метод интернирования для строк. Тем более, что String.intern()
дает гораздо более сильную гарантию, чем вам действительно нужно. Ваша цель состоит в том, чтобы уменьшить использование памяти, поэтому на самом деле идеальное интернирование для жизненного цикла JVM на самом деле не нужно.
Кроме того, я бы использовал Коллекции Google MapMaker
, чтобы создать InternPool
, чтобы избежать повторного создания колеса:
Map<BigDecimal,BigDecimal> bigDecimalPool = new MapMaker()
.weakKeys()
.weakValues()
.expiration(1, TimeUnits.MINUTES)
.makeComputingMap(
new Function<BigDecimal, BigDecimal>() {
public BigDecimal apply(BigDecimal value) {
return value;
}
});
Это даст вам (правильно реализованные) слабые ключи и значения, безопасность потоков, автоматическую очистку старых записей и очень простой интерфейс (простой, хорошо известный Map
). Чтобы быть уверенным, вы также можете обернуть его, используя Collections.immutableMap()
, чтобы избежать неправильного кода.