「毎日5分、遊ぶJVM」:ランタイムデータエリア概要

1413 ワード

概要
まず、JVMのランタイムデータ領域を認識し、JVMが一人であるとすれば、ランタイムデータ領域はこの人の骨格であり、JVMの運行を支えているので、まずランタイムデータ領域の分類と簡単な紹介を学びましょう.
ぶんかつ
領域の観点から、内部メモリと外部メモリに分けることができ、内部メモリにはスレッド独占領域とスレッド共有領域が含まれています.
JVM内部では,スレッド共有の観点からスレッド排他領域とスレッド共有領域に分けることもできる.
スレッドエクスペリエンスには、次の3つのデータ領域が含まれます.
  • プログラムカウンタ(Program Counter Register)
  • 仮想マシンスタック(VM Stack)
  • ローカルメソッドスタック
  • スレッド共有領域には、次の2つのデータ領域があります.
  • メソッド領域(Method Area)
  • ヒープ(Heap)
  • JVMの外部、つまりローカルメモリには、直接メモリとメタデータ(Metadata)が含まれています.JDK 1.8では、メタデータは私たちの前の永続世代(永続世代)です.
    彼らの違いは、JDK 7の永続世代における定数プールがJDK 8でスタックメモリに移動し、残りの部分がメタデータに移動することである.
    マルチスレッドの実現原理
    上記では,実行時のデータ領域をスレッド独占領域とスレッド共有領域に分けたが,Javaにおけるマルチスレッドはどのように実現されるのか.これは、スレッド独占領域と共有領域の理解を深めるのに役立ちます.
    複数のスレッドを実行する場合、CPUの使用時間を無数の小部分に分割し、優先度に応じてこれらのスレッドに時間を割り当て、CPUはこれらの時間ブロックの中で急速に切り替え、ユーザーに感じさせるのはマルチスレッドが同時に実行されていることであり、以下の図である.
    この図を通して,マルチスレッドの効果をどのように達成するかを明確に見ることができる(実際には通信時にも同様の原理がある--時分割多重化)
    一般的には、スレッドの独占領域は主に方法の正常な動作を制御するためであり、スレッドの共有領域は情報を格納する倉庫に似ている.
    簡単な例として、2つのスレッドを使用して同時にこのメソッドを呼び出す方法があります.このメソッドに属する情報を独占領域と呼ぶことができますが、クラスの変数、オブジェクトは2つのメソッドで同時に使用することができます.
    二つの異常
    JVMとの交渉では、StackOverflowErrorOutOfMemoryErrorの2つのエラーに遭遇することがよくあります.StackOverflowErrorは、スレッド排他領域のローカルメソッドスタックおよび仮想マシンスタックに異常に発生し、OutOfMemoryErrorはプログラムカウンタを除くすべての領域に発生します.
    公衆番号
    オリジナルの文章は、才疎学浅で、間違いがあれば、お知らせください.