Middle
Ինչպես է կառուցված Java-ի հիշողությունը?
sobes.tech AI
Պատասխան AI-ից
Java- ում հիշողությունը ավտոմատ կերպով կառավարվում է գարշահոտ հավաքողով և բաժանվում է մի քանի տարածքների.
-
Heap (Կույտ):
- Պահպանում է դասերի օբյեկտները և զանգվածները:
- Միայն մեկ ընդհանուր բոլոր ծրագրի թելերի համար:
- Գարշահոտ հավաքողը աշխատում է այս տարածքի հետ:
- Բաժանված է սերնդների (Young, Old, Permanent):
- Պահպանում է դասերի օբյեկտները և զանգվածները:
-
Stack (Տախտակ):
- Ամեն թել ունի իր սեփական տախտակը:
- Պահպանում է տեղական փոփոխականները և հղումները օբյեկտների վրա:
- Տվյալները ավելացվում և հեռացվում են LIFO սկզբունքով:
- Ավտոմատ կերպով ազատվում է մեթոդի ավարտին:
- Ամեն թել ունի իր սեփական տախտակը:
-
Method Area (Մեթոդների տարածք) / PermGen (Java 8-ից առաջ) / Metaspace (Java 8-ից հետո):
- Պահպանում է բեռնված դասերի մասին տեղեկությունները:
- Դասերի մետադատվությունները:
- Bytecode մեթոդների:
- Ստատիկ փոփոխականները:
- Կոնստանտային պուլը:
- 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 | Ամեն թելին հատուկ | Տեղական primitív տիպեր, հղումներ օբյեկտներին | Ավտոմատ (մեթոդի ավարտին) |
| Method Area | Ընդհանուր JVM-ի համար | Դասերի մետադատվություններ, ստատիկ փոփոխականներ, bytecode, կոնստանտներ | Garbage Collector (դասերի և ստատիկների համար) |
| Native Stacks | Ամեն թելին հատուկ (հայցելիս) | Նատիվ մեթոդների փոփոխականներ և տվյալներ | Ավտոմատ (նատիվ մեթոդի ավարտին) |