Является ли адрес объекта постоянным в течение его жизненного цикла или он может измениться? Я просто думал, что адрес объекта никогда не меняется. Является ли это JVM зависимым? Я не нашел никакой четкой спецификации.Является ли адрес объекта фиксированным в течение его жизненного цикла?
ответ
Адрес объекта в java не фиксирован; скорее, он может измениться (подвергаться условиям).
Это потому, что обычно объекты распределены в пространстве с эденом. Затем они переходят в пространство для оставшихся в живых, а затем также в пространство старого поколения, если они выжили в некоторых циклах сбора мусора. Так оно и есть. Но если объект выделяется в пространстве eden, а также мусор, собранный, оставаясь в том же пространстве, тогда адрес не изменится. Аналогично, если объект слишком велик, чтобы выделяться в пространстве eden, тогда JVM выделяет объект в старом поколении, и если он собирает мусор, оставаясь там, где он был выделен, то и адрес не изменяется.
Еще одна вещь, которую вы должны знать, что даже если один объект остается в поколении, если это мусор, собранный в одном поколении, адрес может измениться, поскольку он может быть перемещен сборщиком мусора во время сбора мусора , например от пространства эден до выжившего, оставшегося в живых до выживших или даже в старом поколении в случае уплотнения.
Из приведенных выше условий ясно, что перемещение адреса зависит от JVM.
Надеюсь, это поможет.
EDIT
Отвечая на вопрос ниже:
если я создаю новый объект и сохранить его в карте, где она хранится на основе хэш-код (который генерируется с использованием память объекта местоположение согласно java). Теперь адрес объекта изменился (в результате получилось в другом hashCode), так что в ответ, код никогда не может извлечь объект с карты ??
hashCodes
сохранены в заголовке объекта JVM. Так что это постоянно. При создании object
он присваивается 1
по умолчанию, но когда вы впервые используете объект, он вычисляется и хранится в заголовке. Он никогда не меняется на протяжении всей жизни Object
.
Ответ кажется правильным.У меня есть одно сомнение, если я создаю новый объект и сохраняю его на карте, где он хранится на основе hashCode (который создается с использованием расположения памяти объекта в соответствии с java). Теперь адрес объекта изменился (в результате получился другой hashCode), так как в ответ, код никогда не сможет извлечь объект с карты? – dharam
@dharam см. Мое редактирование. – Trying
Не в общем. Многие сборщики мусора JVM будут перемещать объекты вокруг, и язык не дает никаких гарантий относительно местоположения объекта.
Есть несколько GC (обычный знак & Sweep, например), которые этого не делают; вы можете использовать специализированную JVM, которая поддерживает их (например, пользовательскую сборку Jikes RVM
), если вам нужна эта функция.
Обратите внимание, что каждый объект может содержать (в основном) уникальный идентификатор (по крайней мере, в JVM, который я видел), частично для поддержки базовой реализации hashcode
.
- 1. Память, потребляемая объектом в течение его жизненного цикла
- 2. Проблема жизненного цикла объекта
- 3. сохранения данных в течение жизненного цикла активности
- 4. жизненного цикла объекта в vb.net
- 5. Профилирование жизненного цикла объекта C++
- 6. Является ли переменная, хранящаяся в сеансе десериализованной один или несколько раз в течение жизненного цикла страницы?
- 7. Является ли адрес первого элемента вектора фиксированным?
- 8. Пример жизненного цикла жизненного цикла
- 9. Использование одного ContentProviderClient в течение жизненного цикла фрагмента
- 10. Альтернатива хранению значения в памяти в течение жизненного цикла приложения
- 11. Как идентификатор пользователя | Основной набор в течение жизненного цикла приложения
- 12. C++ Object & Javascript Неисправность жизненного цикла объекта
- 13. Сохраняйте CloudBlobClient в течение жизненного цикла приложения с впрыском зависимостей
- 14. В течение жизненного цикла реагирования есть личная блок-схема?
- 15. BroadcastReceiver постоянно в течение всего жизненного цикла деятельности
- 16. Является ли служба независимой от жизненного цикла деятельности?
- 17. Ведение списка PendingIntents, сохранение прежнего жизненного цикла объекта-объекта
- 18. Перехваты жизненного цикла в сервисах
- 19. Отслеживание жизненного цикла деятельности
- 20. DialogFragment поведение жизненного цикла
- 21. Атрибуты pthread должны существовать в течение всего жизненного цикла объекта, который их использует?
- 22. Android - фрагмент жизненного цикла
- 23. Сессионный цикл жизненного цикла сеанса
- 24. C# Конец жизненного цикла резьбы.
- 25. Просмотр жизненного цикла контроллера
- 26. Анимация жизненного цикла React
- 27. Последовательность цикла жизненного цикла фрагмента
- 28. Метод жизненного цикла Android
- 29. События жизненного цикла WCF
- 30. Проблема жизненного цикла Android
Его JVM внутренний, потому что JVM магазин адрес ссылки в локальных переменных, JVM сборщик мусора играет роль после создания объекта и эталонного, что объект используется, Невидимый или Недоступен –