Где и как хранится адрес переменной?

Господа, занимаюсь по Java Rush, и там присутствует такая фраза: "Адресом переменной считается адрес первой ячейки выделенного под нее блока памяти." скрин
Т. е. если, например, под переменную int x выделяется 4 байта (ячейки памяти), то адрес этой переменной будет хранится в первом байте? Но ведь все 4 байта отводятся строго под число. Тогда что же получается, под переменную x на самом деле выделяется 5 байт, чтобы в первом байте хранить её адрес?
Link на саму лекцию.
Или как с объектом класса String. Переменная типа String хранит в себе адрес первой ячейки блока памяти, выделенного под сам объект этого класса. Но ведь перменная с адресом объекта должна в себе же хранить и свой адрес тоже.введите сюда описание изображенияНапример переменная str хранит адрес первой ячеки выделенного под объект типа String блока памяти: G13. Но получается что в первой ячейке самой переменной strдолжен хранится её собственный адрес: B13.
Объясните подробно новичку этот момент. Пожалуйста.


Ответы (4 шт):

Автор решения: wigravy

Это информация вначале обучения явно будет лишняя и лишь запутает Вас. Java тем и хороша, что самостоятельно оптимизирует место, чистит мусор и тд (не всегда, но это понадобится потом). Если очень интересно, то вот хорошая статья по этому поводу на хабре, там всё сложнее.

→ Ссылка
Автор решения: Эникейщик

"Адресом считается" и "адрес хранится" это совершенно разные вещи. Хранятся адреса переменных совсем в другом месте.

К примеру, я живу по адресу ул.Пушкина, д.2, но запись об этом адресе хранится не там, а в паспортном столе. Примерно так и с переменными.

Да и хранить адрес переменной по адресу переменной довольно спорная идея - ведь тогда для того, чтобы узнать адрес переменной нужно будет знать адрес этой переменной :)

Еще одна аналогия: библиотека. Книги хранятся внизу в хранилище на полках, но информация о том, на какой именно находится та или иная книга, содержится в каталоге (на карточках или в базе данных). Так и с переменными - они сами хранятся в одном разделе памяти, а информация о том, в какой именно ячейке хранится та или иная переменная, в другом, специально для этого отведенном. А как это реализовано технически, в принципе, уже и неважно, если только не писать особые узкоспециализированные программы.

→ Ссылка
Автор решения: user7860670

Содержимое "лекции" мало пересекается с реальностью. В контексте java какая-либо адресация памяти не предусмотрена! У переменных или полей встроенных или ссылочных типов никаких адресов нет. При выполнении программы соответствующие данные действительно на каких-то этапах могут оказываться где-то в оперативной памяти (а могут и не оказываться), однако когда, как и где именно - глядя на исходный код программы на java ничего определенного сказать нельзя. Собственно одна из основных особенностей java - автоматическая работа с памятью - как раз и направлена на полное абстрагирование исходного кода от непосредственной работы с адресами и других аспектов размещения данных в памяти вычислительного устройства.

→ Ссылка
Автор решения: Андрей Кадецкий

Тут видео как ЦП обращается к RAM. Если в двух словах то по адресной шине идет номер ячейки в памяти, а по шине данных считывание значения из памяти.

→ Ссылка