Sobes.tech
Middle

Kā ir strukturēta Java atmiņa?

sobes.tech AI

Atbilde no AI

Java atmiņa tiek automātiski pārvaldīta ar atkritumu savācēju un ir sadalīta vairākās jomās:

  1. Heap (Heap):

    • Glabā klases objektus un masīvus.
    • Viens visiem lietojumprogrammas pavedieniem.
    • Atkritumu savācējs darbojas ar šo jomu.
    • Sadalīta pa paaudzēm (Young, Old, Permanent).
  2. Stack (Steks):

    • Katram pavedienam ir savs steks.
    • Glabā lokālas primitivu tipu mainīgās un atsauces uz objektiem heapā.
    • Dati tiek pievienoti un noņemti pēc LIFO principa.
    • Automātiski tiek atbrīvoti metodes beigās.
  3. Method Area (Metodes zona) / PermGen (pirms Java 8) / Metaspace (no Java 8):

    • Glabā informāciju par ielādētajām klasēm:
      • Klasu metadati.
      • Bytecode metodes.
      • Statiskās mainīgās.
      • Konstantes pool.
    • PermGen izmērs bija fiksēts, Metaspace izmanto nativu atmiņu un var dinamiski paplašināties.
  4. Native Method Stacks (Nativās metodes steki):

    • Izmanto nativu metožu izsaukumiem (piemēram, C/C++).
    • Tiek atbrīvoti pēc nativās metodes beigām.
// Atmiņas izmantošanas piemērs
public class MemoryExample {

    private String instanceVariable; // Glabājas Heap

    public void myMethod(int parameter) { // parameter glabājas Stack

        int localVar = 10; // localVar glabājas Stack

        String localString = "hello"; // "hello" String Pool (daļa no Heap/Method Area), localString atsauce Stack

        Object obj = new Object(); // Object glabājas Heap, obj atsauce Stack

        Integer wrapper = new Integer(5); // Integer glabājas Heap, wrapper atsauce Stack
    }

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

Atmiņas jomas un to saturs:

Joma Kur atrodas? Ko glabā? Pārvaldība
Heap Kopīga JVM daļa Objekti, masīvi Garbage Collector
Stack Katram pavedienam atsevišķa Vietējas primitivu tipa mainīgās, atsauces uz objektiem Automātiski (metodes beigās)
Method Area Kopīga JVM daļa Klasu metadati, statiskās mainīgās, baitkods, konstantes Garbage Collector (klasēm un statiskajiem)
Native Stacks Katram pavedienam atsevišķa (izsaukuma laikā) Nativu metožu mainīgās un dati Automātiski (nativās metodes beigās)