В чем преимущество создания новых объектов в области кучи, это будет собирать мусор в ближайшее время, когда не будет найдена ссылка на объект? - PullRequest
0 голосов
/ 31 октября 2018
String s = new String("abc");

Здесь новый объект будет создан в константном пуле строк, если «abc» еще не существует. В области кучи будет создан еще один объект.

s = s.concat("def");

Здесь новый объект будет создан в константном пуле строк, если «def» еще не существует, и еще один будет создан в области «куча», содержащей «abcdef». Ссылка s переместится на вновь созданный объект. Вскоре gc () идентифицирует исходный объект как не имеющий ссылки и будет удален из кучи.

В чем преимущество создания дополнительного объекта в области кучи, если JVM удаляет старый. Почему мы не можем присвоить один и тот же начальный объект. Я знаю, что это концепция неизменности, но почему нам нужна неизменность в области кучи, когда нет никакой выгоды. Я принимаю неизменность в постоянном пуле имеет преимущества повторного использования объекта.

Пожалуйста, оставьте свои комментарии и поправьте меня, если я ошибаюсь

1 Ответ

0 голосов
/ 31 октября 2018

Мой вопрос был сосредоточен на том, почему мы храним старый Объект. Может возникнуть вопрос: зачем нам неизменность.

Вот ответ на тот же

Безопасность: параметры обычно представлены в виде строки в сетевых подключениях, URL-адресах подключения к базе данных, именах пользователей / паролях и т. Д. Если бы они были изменяемыми, эти параметры можно было бы легко изменить.

Синхронизация и параллелизм: автоматическая неизменность String делает их потокобезопасными, тем самым решая проблемы синхронизации.

Кеширование: когда компилятор оптимизирует ваши объекты String, он видит, что если два объекта имеют одинаковое значение (a = "test" и b = "test"), и, таким образом, вам нужен только один строковый объект (для a и b, эти двое будут указывать на один и тот же объект).

Загрузка класса: строка используется в качестве аргументов для загрузки класса. В случае изменчивости это может привести к загрузке неправильного класса (поскольку изменяемые объекты меняют свое состояние).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...