Здесь задействованы две отдельные концепции.
Первая - это идея переменной. Как объясняет @ Tenfour04, все объектные переменные требуют 4 или 8 байтов (32- или 64-битная JVM). Это пространство используется для хранения ссылки на объект.
Второе - это сам объект. В вашем примере вы создаете экземпляр класса String с помощью «Some text». Объект будет содержать массив char
примитивов, которые являются отдельными символами в строке ('S', 'o', 'm', et c.) Когда String создается, пространство в куче будет выделено JVM.
Пока ваша переменная содержит ссылку на объект String "Some text", G C не будет предпринимать никаких действий. Когда в коде вашего приложения больше нет ссылок на объект, он получает право на сборку мусора (хотя ничто точно не определяет, когда это произойдет).
Опять же, в вашем примере, когда вы устанавливаете переменную x
чтобы быть null
, вы удаляете ссылку, и объект "Some text" станет подходящим для сбора.
Обычно нет необходимости явно обнулять ссылку, G C очень хорош в поиск объектов, на которые больше нет ссылок. Вместо того, чтобы использовать явное присвоение null, лучше посмотреть на область видимости переменной. Как только переменная выходит за пределы области видимости, она больше не используется, и, следовательно, ссылка, которую она имеет на объект, больше не используется. Объем может быть функцией / методом или блоком кода и т. Д. c.