JVM基本结构

news/2024/11/8 17:39:18/

一、JVM基本结构

Java虚拟机(JVM, Java Virtual Machine)是Java程序执行的环境,其基本结构可以分为以下几个主要部分:

  1. 类加载器子系统(Class Loader Subsystem)

    • 负责加载Java类文件到内存中。它包括三个主要的类加载器:引导类加载器、扩展类加载器和应用程序类加载器。
    • 类加载器采用双亲委派模型,以确保Java类的安全性和一致性。
  2. 内存区(Runtime Data Area):

    • JVM在运行Java程序时,会在内存中分配不同的区域来存储数据。主要包括:
      • 方法区(Method Area):存放类的结构信息,如字段、方法、常量池等。
      • 堆区(Heap Area):用于存放对象实例和数组,是Java内存管理的主要区域。
      • Java栈(Java Stack):每个线程都有自己的Java栈,用于存放局部变量、操作数栈、动态链接等信息。
      • 程序计数器(Program Counter Register):每个线程都有一个程序计数器,用于指示当前线程执行的字节码指令地址。
      • 本地方法栈(Native Method Stack):用于支持Java调用本地方法(Native Method)。
  3. 执行引擎(Execution Engine)

    • 负责执行字节码,包括:
      • 解释器(Interpreter):逐行解释执行字节码。
      • 即时编译器(JIT Compiler):将热点代码编译为本地机器码,以提高执行效率。
      • 垃圾回收器(Garbage Collector):负责自动管理内存,回收不再使用的对象。
  4. 本地库接口(Native Interface):Java 程序可以调用本地代码,从而实现对系统资源的直接访问或使用现有的本地库。

JVM的设计使得Java程序具有跨平台的特性,即“编写一次,到处运行”。通过将Java代码编译为字节码,JVM能够在不同的操作系统和硬件平台上执行这些字节码。

二、JVM 内存区 ----- 两栈一器私有,堆和方法区共享

1、堆(线程共享)
堆中存放几乎所有对象实例,所有程序所创建的对象均保存在堆中

2、Java虚拟机栈(线程私有)
虚拟机栈存放的是各类基本数据类型和对象的引用,包含四部分

  1. 局部变量表: 存放了编译器可知的各种基本数据类型(8大基本数据类型)、对象引用。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是完全确定的,在执行期间不会改变局部变量表大小。简单来说就是存放方法参数和局部变量。
  2. 操作栈:每个方法会生成一个先进后出的操作栈。
  3. 动态链接:指向运行时常量池的方法引用。
  4. 方法返回地址:PC 寄存器的地址。

3、本地方法栈(线程私有)
本地方法栈和虚拟机栈类似,只不过虚拟机栈是给JVM使用的,本地方法栈是给本地方法使用的

4、程序计数器(线程私有)
每条线程都有自己的程序计数器,用来记录代码执行到的位置(行号)

5、方法区(线程共享)
用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。


http://www.ppmy.cn/news/1545414.html

相关文章

《Kotlin实战》-第09章:泛型

第九章 泛型 泛型和变型一般被认为是Java语言中最难处理的部分,Kotlin中也是。 前两节还算简单,讲解泛型的相关知识。第三节讲解变型,会是本书到目前最难理解的部分,概念多,比较难懂,区分有难度。建议先看…

Chrome与傲游浏览器性能与功能的深度对比

在当今数字化时代,浏览器作为我们日常上网冲浪、工作学习的重要工具,其性能与功能直接影响着我们的使用体验。本文将对Chrome和傲游两款主流浏览器进行深度对比,帮助用户更好地了解它们的差异,以便做出更合适的选择。(…

React框架详解:从入门到精通(详细版)

文章目录 前言一、官方网站二、安装React使用 Create React App手动安装 三、React 核心概念1. 组件化2. JSX3. 虚拟DOM4. Props 和 State 四、生命周期方法五、新特性介绍1. Hooks2. Context API 六、状态管理1. Redux2. Mobx3. React Context API 七、最佳实践1. 组件划分2. …

微服务实战系列之玩转Docker(十八)

导览 前言Q:如何保障容器云环境下etcd集群的数据安全一、安全机制身份认证必学必看1. 启动参数2. 授权命令3. 开启认证 二、应用实践1. 访问容器2. 查看认证是否开启3. 查看是否已创建用户4. 创建用户5. 开启认证6. 验证是否开启7. 验证数据 结语系列回顾 前言 etc…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01目录1. A Perspective for Adapting Generalist AI to Specialized Medical AI Applications and Their Challenges2. Synergi…

Python中处理Excel的基本概念(如工作簿、工作表等)

在之前的讨论中,我们已经了解了Python如何与Excel文件进行交互,包括使用Python中的不同库来读取和写入Excel文件。现在我们将进一步探讨Python中处理Excel文件的基本概念,如工作簿(Workbook)、工作表(Works…

智启未来,趣享生活 德国卡赫举办系列新品首发活动

全球最大的清洁设备和清洁解决方案提供商德国卡赫,于11月6日在第七届进博会新品发布平台举办主题为“智启未来,趣享生活”的新品发布会,揭开全球首发新品可折叠式手持清洗机KHB Air以及亚洲首发新品商用清洁机器人KIRA CV 50的神秘面纱。作为…

网站架构知识之Ansible模块(day021)

1.Ansible模块 作用:通过ansible模块实现批量管理 2.command模块与shell模块 command模块是ansible默认的模块,适用于执行简单的命令,不支持特殊符号 案列01,批量获取主机名 ansible all -m command -a hostname all表示对主机清单所有组…