JVM仮想マシンの原理とチューニングの知識(2022)

JVM仮想マシン

1.基本

JVM:JavaVirtualMachine:Java虚拟机

(1)階層関係:

	JDK
		JRE
			JVM
				操作系统

(2)階層機能:

1.Javaプログラム→コンパイル→Javaバイトコード

2.Javaバイトコード→JVM実行→オペレーティングシステム

	执行java字节码:二进制

3.オペレーティングシステム→コンパイル→ハードウェア

(3)JVM分類

1.クラスローディングサブシステム

2.ランタイムデータ領域[スタック、ヒープ、メソッド領域]

1.メソッドエリア

2.ヒープ:スレッド共有、自動管理

散布:散点
堆:存储单位
区分电脑内存堆
存放内容:实例、new对象实例、this指针、数组
管理:垃圾回收器GC自动内存管理机制

3.スタック:シーケンシャルキュー、自動管理

队列:顺序、连续
栈:运行时单位
区分电脑内存栈
公共基本数据类型:int
java方法——栈帧
压栈(栈帧)——出栈(栈帧)

4.登録:スレッド

指令地址
1个线程——1个寄存器

5.ネイティブメソッドスタック

native关键标注

3.実行エンジン(JITコンパイラ、インタプリタ)

JIT编译器(性能):编译执行
解释器(响应时间):逐行解释字节码

(4)JVMアーキテクチャ

1.クラスファイル

入口:编译好字节码文件(编译器前端)

2.クラスローディングサブシステム

经过:类加载子系统(字节码加载到内存生成class对象)
	加载--->链接--->初始化

3.ランタイムデータエリア

4.実行エンジン

解释器(解释运行)
jit及时编译器(编译器后端)
垃圾回收器三部分

(5)プロセス

1.Javaコード実行プロセス

Class文件  →  装载(1) →  类加载器子系统  →  装载(2)  →  运行时数据区
运行时数据区  ↔  执行引擎  ↔  本地方法接口  ↔  本地方法库
运行时数据区  ↔  本地方法接口  ↔  本地方法库

2.Javaコードのコンパイルと実行プロセス

1. Javaバイトコード生成プロセス:.class

源代码 →  词法分析器 →  Token流 →  语法分析器 →  语法树/抽象语法树 →  语义分析器 →  注解抽象语法树 →  字节码生成器 →  JVM字节码

2.バイトコード実行:JVM実行エンジン

JVM字节码 →  机器无关优化 →  中间代码 →  机器相关优化  →  中间代码  →  寄存器分配器  →  中间代码  →  目标代码生成器   →  目标代码

(6)JVMライフサイクル

(7)JVM動作モード

1.サーバーモード(ヘビーウェイト仮想マシン):起動が遅い

2.クライアントモード(軽量仮想マシン):高速起動

客户端程序

次に、クラスのロード:ClassLoader+サブクラス

Bootstrap ClassLoader
Extension ClassLoader
App ClassLoader
Custom ClassLoader

(1)読み込み中:読み込み中

类加载到内存
	1通过一个类的全限定名来获取其定义的二进制字节流
	2将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构
	3在堆中生成一个代表这个类的Class对象,作为方法区中这些数据的访问入口

(2)接続

1.検証:クラス(正確さ)

检查类的合法性
	文件格式验证
	元数据验证
	字节码验证
	符号引用验证

2.準備:変数(スペースの割り当て)

静态变量赋初始值
成员变量赋设定值

3.解析:参照(オプション)

符号引用转换为直接引用
常量池内的符号引用替换为直接引用的过程(地址引用)

(3)初期化

静态变量赋设定值
1、父类的静态变量

2.親クラスの静的コードブロック
3.子クラスの静的変数
4.子クラスの静的コードブロック
5.親クラスの非静的変数6.
非静的コードブロック
親クラス7。親クラスの構築方法
8。子クラス9の非静的変数
、サブクラスの非静的コードブロック
10、サブクラスのコンストラクター。

(4)使用

(5)アンインストール

第三に、クラスローダー

隐式装载:new
显式装载:class.forName
类:系统类、扩展类、自定义类

(1)分類

1.クラスローダーを起動します(ブートストラップクラスローダー):ブートストラップクラスローダー)

2.拡張クラスローダー:拡張クラスローダー

3.プログラムクラスローダー(システムクラスローダー):アプリケーションClassLoader

4.カスタムクラスローダー:ユーザーClassLoader

(2)クラスローディングメカニズム

1.全責任を負います

2.親クラスの委任

3.キャッシュメカニズム

(3)親の委任モデル

第四に、クラスの実装:

5、JVMメモリ管理

(1)スレッドプライベート:スレッドローカル

	程序计数器PC
	栈内存(VM Stack)
		栈帧
		异常
	本地方法栈

(2)スレッド共有:スレッド共有

1.メソッドエリア(永久生成)

	运行时常量池

2、ヒープメモリ(ヒープ)

	存储对象或数组
	新生代
	老年代
	异常

(3)ダイレクトメモリ:ダイレクトメモリ

不受JVM GC管理

6.スレッド

(1)ガーディアンスレッド

	gc(垃圾回收机制)
	匿名守护线程

(2)非デーモンスレッド(通常のスレッド):

	main函数——java应用——java虚拟机
	main函数1——java应用1——java虚拟机1
	main函数2——java应用2——java虚拟机2

おすすめ

転載: blog.csdn.net/qq_25482375/article/details/124331336
おすすめ