Page 279 - 6253
P. 279
Будь-який об'єкт, створений в купі, має глобальний доступ і на нього можуть
посилатися з будь-якої частини програми.
Строго тезами:
Всі об'єкти живуть в кучі і попадають туди при створенні.
Об'єкт складається з полів класу і методів.
В кучі виділяється місце під сам об'єкт, кількість виділеної пам'яті залежить
від полів. Якщо полем служить інтова змінна, то не важливо, чи ми її ініціалізуємо
“0” чи “10000000”, об'єкт займе в кучі свої біти, + стільки байт, скільки вміщає
int(+32 біти) і так з кожним полем.
Стекова пам'ять в Java працює за схемою LIFO (Останній-зайшов-Перший-
вийшов - Last In First Out).
При використанні стека, є доступ тільки до останнього доданого елемента.
Видаливши цей елемент, користувач отримує доступ до передостаннього елемента і
тд. Для зручності можна провести аналогію зі стопкою тарілок або магазином
пістолета (останній заряджений патрон, буде поданий в патронник першим).
Всякий раз, коли викликається метод, в пам'яті стека створюється новий блок,
який містить примітиви і посилання на інші об'єкти в методі. Як тільки метод
закінчує роботу, блок також перестає використовуватися, тим самим надаючи
доступ для наступного методу. Розмір стекової пам'яті набагато менший обсягу
пам'яті в купі.
Строгими тезами:
Всі методи живуть в стеку і попадають туди при виклику.
Змінні в методах також мають стекову пам’ять, так як вони локальні.
Якщо в методі створюється об'єкт, то він переміщується в кучу, а посилання
на нього залишається в стеку і після того, як метод залишить стек – об'єкт стане
жертвою зборщика мусора, так як посилання на нього не буде і не можливо до
об'єкта добратися.
Різниця між Stack і Heap пам'яттю в Java:
Купа використовується всіма частинами додатку в той час як стек
використовується тільки одним потоком виконання програми.
Кожного разу, коли створюється об'єкт, він завжди зберігається в купі, а в
278