Java memory model
Java Memory Model. Що таке Heap і Stack пам'ять в Java?
Java Memory Model використовується всередині в JVM і ділить пам'ять між стеками потоків і купи. Діаграма ілюструє модель пам'яті Java:

Кожен потік працює у віртуальній машині Java і має свій власний стек потоку. Стек потоку містить інформацію про те, як методи потік викликав. а так само створює примітивні змінні (int, double).
Якщо потоки використовують один і той же код, то все одно кожен з них створює свої власні копії примітивів. Всі локальні змінні примітивних типів (Boolean, Byte, CHAR, INT) повністю зберігаються в стеці потоку і, таким чином, не видимим для інших потоків.
Heap (Купа) - містить всі об'єкти, створені в Java додатка, незалежно від того, який потік створив об'єкт. This includes the object versions of the primitive types (Byte, Integer, Long). Не важливо якщо об'єкт був створений і присвоюється локальної змінної, або створений як змінна-член іншого об'єкта, об'єкт все ще зберігається в купі.
Схема, що ілюструє стек викликів і локальних змінних, збережених в стеки потоків і об'єктів, що зберігаються в купі:

Локальна змінна може бути простого типу, в цьому випадку вона повністю зберігається в стеці потоку.

Два потоку маємо набір локальних змінних. Одним з локальних змінних (Local Variable 2) вказують на загальний об'єкт в купі (Object 3). Два потоку мати різні посилання на той же об'єкт. Їх посилання локальні змінні і, таким чином, кожен потік зберігає посилання на об'єкт.
Зверніть увагу, як загальний об'єкт (Object 3) має посилання на Object 2 і Object 4 як змінні (Показано стрілками з Object 3 до Object 2 і Object 4).
Через ці посилання змінні в Object 3 обох потоків можуть отримати доступ до Object 2 і Object 4.
Що таке Heap і Stack пам'ять в Java?
Java Heap пам'ять
Java Heap (купа) використовується Java Runtime для виділення пам'яті під об'єкти і JREкласси. Створення нового об'єкта також відбувається в купі. Тут працює збирач сміття: звільняє пам'ять шляхом видалення об'єктів, на які немає жодних посилань. Будь-який об'єкт, створений в купі, має глобальний доступ і на нього можуть посилатися з будь-якої частини програми.
Stack пам'ять в Java