Middle
Java-da yaddaş necə qurulub?
sobes.tech Süni İntellekt
AI-dan cavab
Java-da yaddaş avtomatik olaraq toplayıcı tərəfindən idarə olunur və bir neçə sahəyə bölünür:
-
Heap (Yığın):
- Sinif obyektləri və massivləri saxlayır.
- Tətbiqin bütün axınları üçün bir sahə.
- Yaddaş toplayıcı bu sahə ilə işləyir.
- Nəsil (Gənc, Köhnə, Daimi) şəklində bölünür.
-
Stack (Yığım):
- Hər axın öz yığınına malikdir.
- Yerli dəyişənlər və obyektlərə istinadlar saxlayır.
- Məlumatlar LIFO (Son daxil olan, ilk çıxarılır) prinsipi ilə əlavə və silinir.
- Metod tamamlandıqda avtomatik sərbəst buraxılır.
-
Method Area (Metod Sahəsi) / PermGen (Java 8-ə qədər) / Metaspace (Java 8-dən sonra):
- Yüklənmiş siniflər haqqında məlumatları saxlayır:
- Sinif meta məlumatları.
- Metodların bayt kodu.
- Statik dəyişənlər.
- Sabitlər hovuzu.
- PermGen ölçüsü sabit idi, Metaspace nativ yaddaş istifadə edir və dinamik olaraq genişlənə bilər.
- Yüklənmiş siniflər haqqında məlumatları saxlayır:
-
Native Method Stacks (Nativ metod yığınları):
- Nativ metod çağırışları üçün istifadə olunur (məsələn, C/C++).
- Nativ metod tamamlandıqda sərbəst buraxılır.
// Yaddaş istifadəsinin nümunəsi
public class MemoryExample {
private String instanceVariable; // Heap-də saxlanılır
public void myMethod(int parameter) { // parameter Stack-də saxlanılır
int localVar = 10; // localVar Stack-də
String localString = "hello"; // "hello" String Pool-da (Heap/Method Area hissəsi), localString istinadı Stack-də
Object obj = new Object(); // Object Heap-də, obj istinadı Stack-də
Integer wrapper = new Integer(5); // Integer Heap-də, wrapper istinadı Stack-də
}
public static void main(String[] args) {
MemoryExample example = new MemoryExample();
example.myMethod(20);
}
}
Yaddaş sahələri və onların məzmunu:
| Sahə | Harada yerləşir? | Nə saxlayır? | İdarəetmə |
|---|---|---|---|
| Heap | JVM ilə paylaşılır | Obyektlər, arraylər | Garbage Collector |
| Stack | Hər thread üçün özəl | Yerli primitiv dəyişənlər, obyektlərə istinadlar | Avtomatik (metod sonunda) |
| Method Area | JVM ilə paylaşılır | Sinif meta məlumatları, statik dəyişənlər, bayt kodu, sabitlər | Garbage Collector (siniflər və statiklər üçün) |
| Native Stacks | Hər thread üçün özəl (çağırış zamanı) | Nativ metodların dəyişənləri və məlumatları | Avtomatik (metod sonunda) |