Если вы хотите реализовать программные ссылки на кэш, это определенно лучшая идея, чем слабые ссылки, но она предоставляет всю вашу политику удаления кэша в руки сборщика мусора. что, вероятно, не то, что вы хотите.
Если политика удаления кэша важна, вам нужно будет сделать это самостоятельно, скорее всего, используя обычные ссылки. Однако вам придется решить, когда извлекать предметы, а какие выбрасывать. Если вы хотите потерять вещи только тогда, когда у вас заканчивается пространство кучи, вы можете запросить доступное пространство кучи с помощью:
Runtime.getRuntime().getFreeMemory();
Затем, когда объем свободной памяти падает ниже определенного уровня, вы можете начинать выбрасывать предметы. Или вы можете просто установить максимальный размер для кэша и использовать его, чтобы решить, когда отбрасывать вещи.
вот кэш LRU i, разработанный с O (1) временем вставки, удаления и поиска, который имеет настраиваемое максимальное количество элементов. Если вам нужен кеш, то это будет лучшим решением, чем SoftHashMap.
Мягкие ссылки - отличный способ создать расширяемый кеш. Таким образом, идеальным решением было бы использовать SoftHashMap вместе с обычным кэшем фиксированного размера. пусть все вставки в кеш идут как в фиксированный кеш, так и в мягкую хеш-карту, а затем для ссылки на что-то, просто посмотрите, есть ли это в мягкой хэш-карте (и обновите эталонное время в кеше). таким образом, все ваши самые важные элементы (в соответствии с выбранной вами политикой LRU, MFU, ...) никогда не будут удалены, поскольку на них жестко ссылаются в кеше, но вы также будете придерживаться большего количества вещей (без контроля политики) до тех пор, пока так как памяти достаточно.