В моем коде, который часто работает на серверах, я не контролирую конфигурацию, у меня есть коллекция пользователей, и каждый пользователь имеет массив byte[]
.
Иногда эти массивы byte[]
уникальны для пользователя. Часто, однако, будут пользователи с большим количеством чисел с точно таким же массивом byte[]
.
Я пытаюсь уменьшить потребление ОЗУ моего сервера.
Я попытался превратить массивы byte[]
в строки и интернировать их, но затем я часто сталкиваюсь с ошибками памяти PERM-GEN. Я также вижу значительное ухудшение производительности при кодировании/декодировании, когда я хочу получить доступ к массиву byte[]
для пользователя, и я вижу значительно увеличенное использование памяти в худшем случае. Существующая строка намного больше, чем массивы.
Как я могу найти поиск Set<SoftReference<byte[]>>
, когда массивы Java не являются хешируемыми, а SoftReferences не переносят хэш объекта в точку. A Map<byte[],SoftReference<byte[]>>
, очевидно, также побеждает себя, потому что ключ сам по себе и предотвращает сбор; и Set
в любом случае реализуется внутри Map
.
Итак, как я могу ставить byte[]
массивы?