Middle
Kako je memorija organizovana u Javi?
sobes.tech АИ
Одговор од АИ
Memorija u Javi se automatski upravlja od strane sakupljača smeća i podeljena je na nekoliko oblasti:
-
Heap (Kup):
- Čuva objekte klasa i nizove.
- Jedan za sve niti aplikacije.
- Sakupljač smeća radi sa ovom oblašću.
- Podeljen je na generacije (Young, Old, Permanent).
-
Stack (Stek):
- Svaka nit ima svoj stek.
- Čuva lokalne promenljive primitivnih tipova i reference na objekte u kupu.
- Podaci se dodaju i uklanjaju po principu LIFO (Last-In, First-Out).
- Automatski se oslobađa pri završetku metode.
-
Method Area (Oblast metoda) / PermGen (pre Java 8) / Metaspace (od Java 8):
- Čuva informacije o učitanim klasama:
- Metapodaci klasa.
- Bytecode metoda.
- Staticke promenljive.
- Konstantni pool.
- Veličina PermGen je bila fiksna, Metaspace koristi nativnu memoriju i može se dinamički proširiti.
- Čuva informacije o učitanim klasama:
-
Native Method Stacks (Stekovi nativnih metoda):
- Koristi se za pozive nativnih metoda (npr. C/C++).
- Oslobađa se pri završetku nativne metode.
// Primer korišćenja memorije
public class MemoryExample {
private String instanceVariable; // Čuva se u Heap
public void myMethod(int parameter) { // parameter se čuva u Stack
int localVar = 10; // localVar se čuva u Stack
String localString = "hello"; // "hello" u String Pool-u (deo Heap/Method Area), referenca localString je u Stack-u
Object obj = new Object(); // Object u Heap, referenca obj je u Stack-u
Integer wrapper = new Integer(5); // Integer u Heap, referenca wrapper je u Stack-u
}
public static void main(String[] args) {
MemoryExample example = new MemoryExample();
example.myMethod(20);
}
}
Oblasti memorije i njihov sadržaj:
| Oblast | Gde se nalazi? | Šta čuva? | Upravljanje |
|---|---|---|---|
| Heap | Zajednička za JVM | Objekti, nizovi | Garbage Collector |
| Stack | Svoj za svaku nit | Lokalni primitivni tipovi, reference na objekte | Automatski (pri završetku metode) |
| Method Area | Zajednička za JVM | Metapodaci klasa, statičke promenljive, bytecode, konstante | Garbage Collector (za klase i statiku) |
| Native Stacks | Svoj za svaku nit (pri pozivu) | Promenljive i podaci nativnih metoda | Automatski (pri završetku nativnog metoda) |