JVM分配了多少种内存区域?
JVM(Java Virtual Machine)是一个抽象机器,换句话说,它是一个程序/软件,它采用Java字节码并将字节码(逐行)转换为机器可理解的代码。
JVM(Java虚拟机)充当运行Java应用程序的运行时引擎。 JVM 是实际调用Java代码中存在的 main 方法的那个。 JVM 是 JRE(Java运行时环境)的一部分。
JVM执行一些特定类型的操作:
- 加载代码
- 验证码
- 执行代码
- 它为用户提供运行时环境
类加载器
它是 JVM 的一个子系统,用于加载类文件。它主要负责三项活动。
- 正在加载
- 链接
- 初始化
JVM分配的内存区域类型:
所有这些功能都采用不同形式的内存结构。 JVM 中的内存分为 5 个不同的部分:
- 类(方法)区
- 堆
- 堆
- 程序计数器寄存器
- 本机方法堆栈
让我们简要介绍一下它们:
1.类(方法)区
类方法区是存储类代码、变量代码(静态变量、运行时常量)、方法代码和Java程序的构造函数的内存块。 (这里的方法是指在类中编写的函数)。它存储每个类的类级数据,例如运行时常量池、字段和方法数据、方法代码。
2. 堆
堆区是创建对象或存储对象的内存块。堆内存为类接口和数组分配内存(数组就是对象)。它用于在运行时为对象分配内存
3. 堆栈
每个线程都有一个私有 JVM 堆栈,与线程同时创建。它用于存储方法返回值和执行动态链接时需要的数据和部分结果。
Java Stack 存储帧,每次调用该方法时都会创建一个新帧。框架在其方法调用完成时被销毁
4.程序计数器寄存器:
每个执行特定方法任务的 JVM 线程都有一个与之关联的程序计数器寄存器。非本地方法具有存储可用 JVM 指令地址的 PC,而在本地方法中,程序计数器的值是未定义的。 PC 寄存器能够在某些特定平台上存储返回地址或本机指针。
5. 原生方法栈:
也称为 C 堆栈,本机方法堆栈不是用Java语言编写的。该内存是在创建时为每个线程分配的,它可以是固定的或动态的。