Что такое Heap и Stack память в Java? Разбор на примере
HTML-код
- Опубликовано: 23 авг 2024
- Статья о стек памяти и кучи в Java:
javadevblog.co...
Подписывайтесь в соц. сетях!
Facebook: / javadevblogcom
Twitter: / javadevblogcom
E-mail: eepurl.com/cvWbbX
Javadevblog.com - программирование на Java и разработка под Android
А как вы считаете, какие методы лучше использовать для оптимизации памяти в Java? Лично я долго выбирал курсы по IT, рассматривал разные компании, но в итоге выбрал Skypro из-за наличия наставника. После окончания курса получил оффер и перешел на удаленку))
В Java параметры всегда передаются только по значению, что определяется как «скопировать значение и передать копию». С примитивами это будет копия содержимого. Со ссылками - тоже копия содержимого, т.е. копия ссылки. При этом внутренние члены ссылочных типов через такую копию изменить возможно, а вот саму ссылку, указывающую на экземпляр - нет.
согласен
Хорошее видео, только в java , согласно документации, все передается по значению. Просто у ссылочных типов значением является ссылка. Соответственно создается копия этой ссылки и передается в метод
если копия то она добавляется в стек?
Вообще автор сказал так: "Объекты передаются по ссылке". Первое - в Java объекты вообще не передаются! В методы я передаю либо копию (значение) текущего значения в случае примитивных типов данных, либо копию (значение) ссылки. Второе - всё передаётся по значению, и передача ссылки на объект в функцию - это передача копии ссылки, а точнее передача копии адреса в памяти, по которому хранится объект. Попытался ясно выразиться, но может быть не получилось, так что поправьте в местах, где я был не прав или не точен :)
@@user-df1bx3jl2c Та это ж очевидно) что копия
@@atlasua2021 ну ды)
По-моему в строке #7 переменная будет интернирована в пул строк только при вызове метода intern(), который либо вернет ссылку на уже существующую в пуле строку, либо добавит новую строку в пул и вернет ссылку на новый объект.
Видно, что постарался, круто, наглядно получилось.
Хорошая вводная. Спасибо.
Про пул строк имхо неверно. Имхо пул строк содержит строковые литералы, определенные в программе.
Да, в пул строк отправляются только литералы. В примере автора string будет просто в heap. examples.javacodegeeks.com/core-java/lang/string/java-string-pool-example/
Внутри ссылка представляет собой набор битов, который указывает на объект в куче, также как и любая переменная(например byte b = 6, означает что bit pattern в переменной (byte holder) - 00000110, int holder уже хранить 32 бита и и т.д). Поэтому при передаче ссылки в метод, битовое представление ссылки(Reference variable bit holder), не объект, копируеться, а копиреуться - если просто - то способ того как добраться до объекта. Формат хранения зависит от VM. В данном случае instance variable - object and param имеют одинаковый bit pattern. Следовательно все в Java передается по значению.
P/s String это совсем другая история.
Отличное видео! Все коротко и ясно, спасибо!
Спасибо!
А разве все классы (точней их байт коды), а также описания всех методов (их инструкции) при запуске загружаются не в PermGem (Method space) ?
Примитивы и ссылки на объекты в Stack (как и говорит автор)?
В Heap'е размещаются уже сами объекты?
А то начал изучать Java и пробую разобраться во всем этом.
Автор вряд-ли вообще слышал про этот твой пермгем. Автор умный канеш , но не до такой же степени😏
PermGen* :)
Привет! Разобрался с темой? Если да - посоветуешь материал (видео/статья/доки)? А то, по-моему, в этом ролике местами каша.
@@manOfPlanetEarth да, там ерунда, я читала Основы Java (для 8 версии), Хорстманн, там сказано, что всё в Java передается по значению, но нормальной инфы про память пока не искала, вот решила, может на ютубе кто нормально объяснит, но это точно минус. Найду - кину
@@alice_gumileva
ок.
спасибо
Вы на 2:40 минуте рассказывая про третью строку, сказали что "стековая память содержит ссылку на Object", читаю книгу "Изучаем Java", на 277 стр., в разделе ключевые моменты , говориться что " если переменная - это ссылка на объект, то она будет храниться вместе с ним в КУЧЕ!", не очень понимаю этот момент, объясните пожалуйста!
Вероятно, в вашем примере речь шла об обьекте, на который ссылается поле класса. Поскольку обьекты класса хранятся внутри кучи, то, следовательно, и ссылки на другие обьекты (в полях) также хранятся в куче.
@@oleghalat3140
Салют. Разбираешься?:) Подкинешь что-нибудь по модели памяти в джаве? Я даже на канале jug ru ничего не нашел (точнее только один видос, скоро буду смотреть).
Только надо на уровне.
Похоже, надо на английском искать и в тексте. Может, в доках есть🤔
В общем, если есть качественный линк - делитесь:)
в Java ВСЕ передается по ЗНАЧЕНИЮ.
Мне кажется он просто оговорился, так как дальше сказал что создается копия ссылки.
@@user-gl2bt1on5p вникайте в суть, а не в слова))
@@user-varmat когда новичок это смотрит - это вообще не работает, а тому кто шарит - такие видео не нужны
В видео много ошибок, не советую смотреть его, как обучающее
Спасибо!
Спасибо!