Что такое Heap и Stack память в Java? Разбор на примере

Поделиться
HTML-код
  • Опубликовано: 23 авг 2024
  • Статья о стек памяти и кучи в Java:
    javadevblog.co...
    Подписывайтесь в соц. сетях!
    Facebook: / javadevblogcom
    Twitter: / javadevblogcom
    E-mail: eepurl.com/cvWbbX
    Javadevblog.com - программирование на Java и разработка под Android

Комментарии • 33

  • @EdmundBowie-n3z
    @EdmundBowie-n3z 27 дней назад +56

    А как вы считаете, какие методы лучше использовать для оптимизации памяти в Java? Лично я долго выбирал курсы по IT, рассматривал разные компании, но в итоге выбрал Skypro из-за наличия наставника. После окончания курса получил оффер и перешел на удаленку))

  • @ihormanzii
    @ihormanzii 3 года назад +20

    В Java параметры всегда передаются только по значению, что определяется как «скопировать значение и передать копию». С примитивами это будет копия содержимого. Со ссылками - тоже копия содержимого, т.е. копия ссылки. При этом внутренние члены ссылочных типов через такую копию изменить возможно, а вот саму ссылку, указывающую на экземпляр - нет.

  • @grayhouse6925
    @grayhouse6925 3 года назад +9

    Хорошее видео, только в java , согласно документации, все передается по значению. Просто у ссылочных типов значением является ссылка. Соответственно создается копия этой ссылки и передается в метод

    • @atlasua2021
      @atlasua2021 3 года назад

      если копия то она добавляется в стек?

    • @user-df1bx3jl2c
      @user-df1bx3jl2c 3 года назад +3

      Вообще автор сказал так: "Объекты передаются по ссылке". Первое - в Java объекты вообще не передаются! В методы я передаю либо копию (значение) текущего значения в случае примитивных типов данных, либо копию (значение) ссылки. Второе - всё передаётся по значению, и передача ссылки на объект в функцию - это передача копии ссылки, а точнее передача копии адреса в памяти, по которому хранится объект. Попытался ясно выразиться, но может быть не получилось, так что поправьте в местах, где я был не прав или не точен :)

    • @atlasua2021
      @atlasua2021 3 года назад

      @@user-df1bx3jl2c Та это ж очевидно) что копия

    • @user-df1bx3jl2c
      @user-df1bx3jl2c 3 года назад

      @@atlasua2021 ну ды)

  • @AlexanderSergeenko
    @AlexanderSergeenko 5 лет назад +4

    По-моему в строке #7 переменная будет интернирована в пул строк только при вызове метода intern(), который либо вернет ссылку на уже существующую в пуле строку, либо добавит новую строку в пул и вернет ссылку на новый объект.

  • @user-varmat
    @user-varmat 5 лет назад +3

    Видно, что постарался, круто, наглядно получилось.

  • @nurtdinovayrat
    @nurtdinovayrat 6 лет назад +3

    Хорошая вводная. Спасибо.

  • @akaAlekseyS
    @akaAlekseyS 6 лет назад +6

    Про пул строк имхо неверно. Имхо пул строк содержит строковые литералы, определенные в программе.

    • @whoIsMisterNikolay
      @whoIsMisterNikolay 5 лет назад +1

      Да, в пул строк отправляются только литералы. В примере автора string будет просто в heap. examples.javacodegeeks.com/core-java/lang/string/java-string-pool-example/

  • @vitaliykopach4300
    @vitaliykopach4300 5 лет назад +1

    Внутри ссылка представляет собой набор битов, который указывает на объект в куче, также как и любая переменная(например 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 это совсем другая история.

  • @GerNik0794
    @GerNik0794 6 лет назад +1

    Отличное видео! Все коротко и ясно, спасибо!

  • @user-hn7yq1eh6n
    @user-hn7yq1eh6n Год назад

    Спасибо!

  • @taraskutselya1326
    @taraskutselya1326 5 лет назад +2

    А разве все классы (точней их байт коды), а также описания всех методов (их инструкции) при запуске загружаются не в PermGem (Method space) ?
    Примитивы и ссылки на объекты в Stack (как и говорит автор)?
    В Heap'е размещаются уже сами объекты?
    А то начал изучать Java и пробую разобраться во всем этом.

    • @user-gl2bt1on5p
      @user-gl2bt1on5p 5 лет назад

      Автор вряд-ли вообще слышал про этот твой пермгем. Автор умный канеш , но не до такой же степени😏

    • @MrOldschoolrocknroll
      @MrOldschoolrocknroll 3 года назад

      PermGen* :)

    • @manOfPlanetEarth
      @manOfPlanetEarth 2 года назад

      Привет! Разобрался с темой? Если да - посоветуешь материал (видео/статья/доки)? А то, по-моему, в этом ролике местами каша.

    • @alice_gumileva
      @alice_gumileva Год назад

      @@manOfPlanetEarth да, там ерунда, я читала Основы Java (для 8 версии), Хорстманн, там сказано, что всё в Java передается по значению, но нормальной инфы про память пока не искала, вот решила, может на ютубе кто нормально объяснит, но это точно минус. Найду - кину

    • @manOfPlanetEarth
      @manOfPlanetEarth Год назад

      @@alice_gumileva
      ок.

  • @yerkebulantursynbek9860
    @yerkebulantursynbek9860 Год назад

    спасибо

  • @nikolayshahinyan4886
    @nikolayshahinyan4886 4 года назад

    Вы на 2:40 минуте рассказывая про третью строку, сказали что "стековая память содержит ссылку на Object", читаю книгу "Изучаем Java", на 277 стр., в разделе ключевые моменты , говориться что " если переменная - это ссылка на объект, то она будет храниться вместе с ним в КУЧЕ!", не очень понимаю этот момент, объясните пожалуйста!

    • @oleghalat3140
      @oleghalat3140 2 года назад

      Вероятно, в вашем примере речь шла об обьекте, на который ссылается поле класса. Поскольку обьекты класса хранятся внутри кучи, то, следовательно, и ссылки на другие обьекты (в полях) также хранятся в куче.

    • @manOfPlanetEarth
      @manOfPlanetEarth 2 года назад

      @@oleghalat3140
      Салют. Разбираешься?:) Подкинешь что-нибудь по модели памяти в джаве? Я даже на канале jug ru ничего не нашел (точнее только один видос, скоро буду смотреть).
      Только надо на уровне.
      Похоже, надо на английском искать и в тексте. Может, в доках есть🤔
      В общем, если есть качественный линк - делитесь:)

  • @Bonik-cj2zu
    @Bonik-cj2zu 5 лет назад +18

    в Java ВСЕ передается по ЗНАЧЕНИЮ.

    • @user-varmat
      @user-varmat 5 лет назад +1

      Мне кажется он просто оговорился, так как дальше сказал что создается копия ссылки.

    • @user-varmat
      @user-varmat 5 лет назад

      @@user-gl2bt1on5p вникайте в суть, а не в слова))

    • @alice_gumileva
      @alice_gumileva Год назад +2

      @@user-varmat когда новичок это смотрит - это вообще не работает, а тому кто шарит - такие видео не нужны

  • @bones_wp_
    @bones_wp_ 5 месяцев назад +1

    В видео много ошибок, не советую смотреть его, как обучающее

  • @marinacherkasova5449
    @marinacherkasova5449 4 года назад

    Спасибо!

  • @atlasua2021
    @atlasua2021 3 года назад

    Спасибо!