У меня есть большое количество строк, которые равны. Значения не будут часто меняться.string.intern не используется меньше память
Поскольку string.intern()
должен возвращать только ссылку, я интернировал каждый из списка из 100 миллионов точно таких же строк, хранящихся в ArrayList
.
Я ожидал увидеть, что память Java идет вниз, но сохранение нормальной строки и интернированной строки показало разницу менее 0,1%.
Я что-то упустил или это ожидаемое поведение?
используйте код
long max = 100000000;
for(int i =0 ; i < max;i++){
list.add("sometextelidedforbrevity".intern());
}
Память поколения Список без 1 242 360 Кб и 1 242 184 КБ.
Как вы создаете эти строки? Покажите нам свой код. Возможно, они уже могут быть интернированы. – cdhowie
Вы используете строковые литералы или 'new String()'? Поскольку строковые литералы интернированы автоматически ... –
Сколько памяти используется? –