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
Stringosztá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.