Middle
Ҳотира дар Java чӣ гуна сохта шудааст?
sobes.tech AI
Ҷавоб аз AI
Жадграбата в Java се управлява автоматично от събирача на отпадъци и е разделена на няколко области:
-
Heap (Куча):
- Съхранява обекти на класове и масиви.
- Един за всички нишки на приложението.
- Garbage Collector работи с тази област.
- Разделена е на поколения (Young, Old, Permanent).
-
Stack (Стек):
- Всяка нишка има свой стек.
- Съхранява локални променливи от примитивни типове и препратки към обекти в кучата.
- Данните се добавят и премахват по принципа LIFO (Last-In, First-Out).
- Автоматично се освобождава при завършване на метода.
-
Method Area (Област на методите) / PermGen (преди Java 8) / Metaspace (от Java 8):
- Съхранява информация за заредените класове:
- Метаданни на класовете.
- Байткод на методите.
- Статични променливи.
- Константен пул.
- Размерът на PermGen беше фиксиран, Metaspace използва нативна памет и може да се разширява динамично.
- Съхранява информация за заредените класове:
-
Native Method Stacks (Стекове на нативните методи):
- Използва се за извиквания на нативни методи (например C/C++).
- Освобождава се при завършване на нативния метод.
// Пример за използване на паметта
public class MemoryExample {
private String instanceVariable; // Съхранява се в Heap
public void myMethod(int parameter) { // parameter се съхранява в Stack
int localVar = 10; // localVar се съхранява в Stack
String localString = "hello"; // "hello" в String Pool (част от Heap/Method Area), референцията localString е в Stack
Object obj = new Object(); // Object в Heap, референцията obj е в Stack
Integer wrapper = new Integer(5); // Integer в Heap, референцията wrapper е в Stack
}
public static void main(String[] args) {
MemoryExample example = new MemoryExample();
example.myMethod(20);
}
}
Области на паметта и тяхното съдържание:
| Област | Къде се намира? | Какво съхранява? | Управление |
|---|---|---|---|
| Heap | Общ за JVM | Обекти, масиви | Garbage Collector |
| Stack | Свой за всяко нишка | Локални примитиви, препратки към обекти | Автоматично (при завършване на метода) |
| Method Area | Общ за JVM | Метаданни на класове, статични променливи, байткод, константи | Garbage Collector (за класове и статични) |
| Native Stacks | Свой за всяко нишка (при извикване) | Променливи и данни на нативни методи | Автоматично (при завършване на нативен метод) |