Sobes.tech
Middle

როგორ არის მოწყობილი მეხსიერება Java-ში?

sobes.tech AI

პასუხი AI-სგან

Java-да հիշողությունը ավտոմատ կերպով կառավարվում է գարշահոտ հավաքողով և բաժանվում է մի քանի տարածքների:

  1. Heap (Կույտ):

    • Սպասում է դասերի օբյեկտներին և զանգվածներին:
      • Միայն մեկ ընդհանուր բոլոր ծրագրի թելերի համար:
      • Գարշահոտ հավաքողը աշխատում է այս տարածքի հետ:
      • Բաժանված է սերնդների (Young, Old, Permanent):
  2. Stack (Տախտակ):

    • Ամեն թել ունի իր սեփական տախտակը:
      • Պահպանում է տեղական փոփոխականները և հղումները օբյեկտների վրա:
      • Տվյալները ավելացվում և հեռացվում են LIFO սկզբունքով:
      • Ավտոմատ կերպով ազատվում է մեթոդի ավարտին:
  3. Method Area (Մեթոդների տարածք) / PermGen (Java 8-ից առաջ) / Metaspace (Java 8-ից հետո):

    • Պահպանում է բեռնված դասերի մասին տեղեկությունները:
      • Դասերի մետադատվությունները:
      • Bytecode մեթոդների:
      • Ստատիկ փոփոխականները:
      • Կոնստանտային պուլը:
    • PermGen-ի չափը սահմանափակ էր, Metaspace-ը օգտագործում է նատիվ հիշողություն և կարող է դինամիկ ընդլայնվել:
  4. 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 Սեփական յուրաքանչյուր թելին (հայցելիս) Նատիվ մեթոդների փոփոխականներ և տվյալներ Ավտոմատ (նատիվ մեթոդի ավարտին)