У меня есть приложение, которое использует тонну String
объектов.Один из моих объектов (назовем его Person
) содержит 9 из них.Данные, которые записываются в каждый объект String
, никогда не записываются более одного раза, но после этого будут считаны несколько раз.Там будет несколько сотен тысяч или около того Person
объектов в данный момент времени, и многие из этих Person
объектов будут иметь имя, фамилию и т. Д. ...
Я пытаюсь придумать немедленные путичтобы уменьшить объем памяти, который используется объектом Person
, но я не эксперт, когда речь заходит о том, как Java управляет своей памятью.
Прежде чем я спущусь по этой кроличьей норе, я хотел бы знать, какие бы были недостатки, если бы я пошел по этим путям, и если бы это вообще имело смысл:
- Использование
StringBuilder
или StringBuffer
исключительно из-за метода trimToSize()
, который позволил бы мне уменьшить количество выделенных байтов, используемых в строке. - Сохранять строки как массивы
byte[]
и предоставлять получательэто преобразовало бы byte[]
в String
и установщик, который принял бы String
и преобразовал бы в byte[]
- данные читаются довольно немного, так что это будет слишком дорого? - Создатьхеш-таблица для (давайте просто скажем) «имен», которые будут препятствовать повторному выделению (используя указатель) для одного и того же имени снова и снова (могут быть тысячи имен с 10+ символами).
Прежде чем я бессмысленно направляюсь по какой-либо из этих дорог, имеет ли это смысл делать?Может быть, Java уже сокращает String
выделений и проверяет дубликаты?
Я тоже не возражаю против хорошего чтения.Я нашел некоторую документацию, но ничего такого, что могло бы исследовать до такой глубины.