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:
-
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).
-
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.
-
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.
- Glabā informāciju par ielādētajām klasēm:
-
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) |