Javaのメモリ構造


JVMはオペレーティングシステムからメモリ割り当てを取得します.また,割り当てられた空間を「Runtime Data Area」と呼ぶ.
割り当てられたスペースを5つのエリアに分けて管理します.
  • Class Area(=Method Area)
  • Stack Area
  • Heap Area
  • Native Method Stack Area
  • PC Register
  • クラス領域(=メソッド領域)とは?
  • クラスファイルのバイトコードロード位置
    *クラス・ロードの理由は、メソッドを呼び出す場合は、そのメソッドを持つクラス・ファイルをメモリにロードする必要があるためです.クラスを実行するときclassファイルを見つけてメモリでロードします.
  • スタック領域
  • 領域変数およびパラメータは
  • に格納される.
  • プログラムは、実行中に「一時的に割り当てられた」ものであり、それが完了すると、すぐに消えたものが格納されます.すなわち,メソッドを呼び出すたびにそのメソッドのローカル変数が準備され,メソッド呼び出しが終了すると,そのメソッドのために準備されたすべての変数がスタックから削除される.
  • 基本(テキスト)タイプ変数は、スタック領域に直接値を有します.
  • 参照タイプ変数は、hip領域またはメソッド領域のスタックアドレスを有する.
  • public class StackMemoryTest {
       public static void test1(int a){
          test2(++a)
          System.out.printf(test1() : %d\n”, a);
       }
    
      public static void test2(int a) {
         ++a
        System.out.printf(test2() : %d\n”, a);
      }
     
     public static void main (String[] args ) {
       int a = 1;
       test1(a)
       System.out.printf(main() : %d\n”, a);
    }
     
    } 
    結果
    test2() :  3
    test1() :  2
    main() : 1 


    臀部領域
  • の新しい演算子によって生成されたオブジェクトまたは作成されたオブジェクトが格納され、Java定数プールには
  • が存在する.
  • スタック領域に格納されているローカル変数、パラメータとは異なり、hip領域に格納されているメモリは、ゴミ収集器によって消去されるか、JVMによって終了するまでメソッド呼び出しの終了時に消失しません.
  • インスタンスを個別のhip領域に割り当てるのは、インスタンスの破棄方法と破棄時間が領域変数(スタック領域に割り当てられた変数)と異なるためである.
  • 8種類の文字変数を除いて、他のタイプで定義された変数はすべて参照変数です.これらの参照変数は、実行するたびにスタックメモリ領域に大量のデータを格納するため、効率が非常に低いため、hip領域にはコンテンツ(真値)が格納され、スタックメモリには簡単なアドレスのみが格納されます.
  • [注意]文字の種類
    https://velog.io/@locodingve/Java-DataType
    コメントサイト:
  • https://wanzargen.tistory.com/17
  • https://wanzargen.tistory.com/16?category=700063
  • https://velog.io/@dev_isaac/JVM