Sobes.tech
Junior

Hogyan tárolódnak az adatok Java-ban?

sobes.tech MI

Válasz az MI-től

A Java adatai különböző módon tárolódnak a memóriában:

  • Alapvető típusok: Az értékek közvetlenül a lefoglalt memóriahelyeken tárolódnak (például verem). Ide tartoznak a byte, short, int, long, float, double, boolean, char.

    // int - primitív típus, az érték közvetlenül tárolódik
    int age = 30;
    
  • Referencia típusok: A memóriában egy hivatkozás (cím) tárolódik, amely a tényleges objektum helyére mutat (a halomban). Ide tartoznak az osztályok, interfészek, tömbök.

    // String - referencia típus, az adat a "Hello" objektumra mutató hivatkozást tartalmazza
    String data = "Hello";
    // Egy CustomObject objektum a halomban jön létre, az obj a hivatkozást tartalmazza
    CustomObject obj = new CustomObject();
    
  • Tömbök: Objektumok a halomban, amelyek egy elemekből álló gyűjteményt tartalmaznak (akár primitív értékeket, akár más objektumokra mutató hivatkozásokat). A tömb változója a hivatkozást tartalmazza erre az objektumra.

    // Egész számok tömbje, a nums a tömb objektumra mutató hivatkozást tartalmazza a halomban
    int[] numbers = new int[10];
    // Stringek tömbje, a names a String objektumokat tartalmazó tömbre mutató hivatkozást tartalmaz
    String[] names = {"Alice", "Bob"};
    
  • Objektumok: A halomban jönnek létre. A változó a hivatkozást tartalmazza az objektumra. Az objektumon belül tárolódhatnak primitív értékek vagy más objektumokra mutató hivatkozások.

    // Person osztály és mezők
    class Person {
        String name; // String objektumra mutató hivatkozás
        int age; // Primitív érték
    }
    
    // Person objektum létrehozása a halomban, a person a hivatkozást tartalmazza
    Person person = new Person();
    person.name = "Charlie";
    person.age = 25;
    
  • Stringek: A String osztály objektumai, a halomban tárolódnak. A stringek immutábilisak (nem változtathatók). Az értékeiket gyakran cache-elik a String Poolban az optimalizáció érdekében, amikor literálként jönnek létre.

    // String literál, a String Poolban jöhet létre
    String str1 = "Java";
    // Új String objektum létrehozása a halomban
    String str2 = new String("Java");
    
  • Gyűjtemények (List, Set, Map stb.): Objektumok a halomban, amelyek más objektumokra mutató hivatkozásokat tartalmaznak.

    // ArrayList a hozzáadott String objektumokra mutató hivatkozásokat tartalmaz
    List<String> fruits = new ArrayList<>();
    fruits.add("Apple");
    fruits.add("Banana");
    
  • Verem (Stack): A helyi változók (primitív típusok), objektumokra mutató hivatkozások és a metódushívások (call stack) információinak tárolására szolgál. A veremben lévő adatok életciklusa a hívó metódushoz kötött.

  • Heap: Minden objektum tárolására szolgál. A memória tisztítása a szemétgyűjtő (Garbage Collector) által történik.

Így az adatok Java-ban a verem (primitive típusok és hivatkozások számára) és a heap (objektumok számára) között oszlanak meg.