Sobes.tech
Middle

Ҳотира дар Java чӣ гуна сохта шудааст?

sobes.tech AI

Ҷавоб аз AI

Жадграбата в Java се управлява автоматично от събирача на отпадъци и е разделена на няколко области:

  1. Heap (Куча):

    • Съхранява обекти на класове и масиви.
    • Един за всички нишки на приложението.
    • Garbage Collector работи с тази област.
    • Разделена е на поколения (Young, Old, Permanent).
  2. Stack (Стек):

    • Всяка нишка има свой стек.
    • Съхранява локални променливи от примитивни типове и препратки към обекти в кучата.
    • Данните се добавят и премахват по принципа LIFO (Last-In, First-Out).
    • Автоматично се освобождава при завършване на метода.
  3. Method Area (Област на методите) / PermGen (преди Java 8) / Metaspace (от Java 8):

    • Съхранява информация за заредените класове:
      • Метаданни на класовете.
      • Байткод на методите.
      • Статични променливи.
      • Константен пул.
    • Размерът на PermGen беше фиксиран, Metaspace използва нативна памет и може да се разширява динамично.
  4. Native Method Stacks (Стекове на нативните методи):

    • Използва се за извиквания на нативни методи (например C/C++).
    • Освобождава се при завършване на нативния метод.
// Пример за използване на паметта
public class MemoryExample {

    private String instanceVariable; // Съхранява се в Heap

    public void myMethod(int parameter) { // parameter се съхранява в Stack

        int localVar = 10; // localVar се съхранява в Stack

        String localString = "hello"; // "hello" в String Pool (част от Heap/Method Area), референцията localString е в Stack

        Object obj = new Object(); // Object в Heap, референцията obj е в Stack

        Integer wrapper = new Integer(5); // Integer в Heap, референцията wrapper е в Stack
    }

    public static void main(String[] args) {
        MemoryExample example = new MemoryExample();
        example.myMethod(20);
    }
}

Области на паметта и тяхното съдържание:

Област Къде се намира? Какво съхранява? Управление
Heap Общ за JVM Обекти, масиви Garbage Collector
Stack Свой за всяко нишка Локални примитиви, препратки към обекти Автоматично (при завършване на метода)
Method Area Общ за JVM Метаданни на класове, статични променливи, байткод, константи Garbage Collector (за класове и статични)
Native Stacks Свой за всяко нишка (при извикване) Променливи и данни на нативни методи Автоматично (при завършване на нативен метод)