Sobes.tech
Middle

Hoe is het geheugen in Java opgebouwd?

sobes.tech AI

Antwoord van AI

In Java wordt het geheugen automatisch beheerd door de garbage collector en verdeeld in verschillende gebieden:

  1. Heap (Heap):

    • Slaat klasse-objecten en arrays op.
    • Eén voor alle threads van de toepassing.
    • De garbage collector werkt met dit gebied.
    • Opgedeeld in generaties (Jong, Oud, Permanent).
  2. Stack (Stapel):

    • Elke thread heeft zijn eigen stack.
    • Slaat lokale variabelen van primitieve types en referenties naar objecten in de heap op.
    • Gegevens worden toegevoegd en verwijderd volgens het LIFO-principe (Last-In, First-Out).
    • Wordt automatisch vrijgegeven bij het beëindigen van de methode.
  3. Method Area (Methodengebied) / PermGen (tot Java 8) / Metaspace (vanaf Java 8):

    • Slaat informatie op over geladen klassen:
      • Metadata van klassen.
      • Bytecode van methoden.
      • Statische variabelen.
      • Constant pool.
    • De grootte van PermGen was vast, Metaspace gebruikt native geheugen en kan dynamisch worden uitgebreid.
  4. Native Method Stacks (Stakken van native methoden):

    • Wordt gebruikt voor aanroepen van native methoden (bijvoorbeeld C/C++).
    • Wordt vrijgegeven bij het beëindigen van de native methode.
// Voorbeeld van geheugengebruik
public class MemoryExample {

    private String instanceVariable; // Opgeslagen in Heap

    public void myMethod(int parameter) { // parameter in Stack

        int localVar = 10; // localVar in Stack

        String localString = "hello"; // "hello" in String Pool (deel van Heap/Method Area), referentie localString in Stack

        Object obj = new Object(); // Object in Heap, referentie obj in Stack

        Integer wrapper = new Integer(5); // Integer in Heap, referentie wrapper in Stack
    }

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

Geheugengebieden en hun inhoud:

Gebied Waar bevindt het zich? Wat slaat het op? Beheer
Heap Gedeeld voor de JVM Objecten, arrays Garbage collector
Stack Eigen voor elke thread Lokale primitieve variabelen, referenties naar objecten Automatisch (bij method einde)
Method Area Gedeeld voor de JVM Metagegevens van klassen, statische variabelen, bytecode, constanten Garbage collector (voor klassen en statisch)
Native Stacks Eigen voor elke thread (bij aanroep) Variabelen en gegevens van native methoden Automatisch (bij method einde)