当前位置: 首页 > article >正文

JVM(Java虚拟机)

Java的“一次编写,处处运行”主要得益于Java的设计理念和Java虚拟机(JVM)的存在。

JVM(Java Virtual Machine)是Java虚拟机的简称,它是运行所有Java程序的抽象计算机。也就是说,JVM是一个能够运行Java字节码的虚拟的计算机平台。

JVM的主要功能是负责Java程序的加载、链接、初始化、执行以及提供一个与硬件无关的运行环境。Java源代码经过编译后会生成字节码文件,然后由JVM解释或编译执行。这样的设计使得Java程序能够在各种硬件和操作系统上运行,实现了“一次编写,处处运行”。

此外,JVM还负责内存管理和垃圾回收,它会自动管理对象的生命周期,当一个对象不再被引用时,JVM会自动回收其占用的内存,这极大地简化了程序员的工作。


Java虚拟机(JVM)的核心组件主要包括以下几个部分:

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

负责从文件系统或者网络中加载Java类,对字节码进行验证,然后解析和初始化类。

  • 加载(Loading):将类的字节码从文件系统或网络加载到内存中。
  • 链接(Linking):验证、准备和解析类。验证确保类的字节码符合JVM的规范,准备阶段为类的静态变量分配内存,解析阶段将类中的符号引用转换为直接引用。
  • 初始化(Initialization):执行类的初始化方法(静态块和静态变量的初始化)。

2.运行时数据区(Runtime Data Areas)

这是JVM的主要组成部分,包括以下几个区域,负责存储在JVM运行过程中产生的数据。

  • 方法区(Method Area):存储类的结构信息,如类的常量池、字段和方法数据以及类的静态变量等。方法区也称为永久代(PermGen)或元空间(Metaspace),具体取决于JVM的实现。
  • 堆(Heap):用于存放对象实例和数组。垃圾回收器主要在堆中工作。
  • 虚拟机栈(Java Stack):每个线程都有自己的Java栈,用于存储方法调用的局部变量、操作数栈和栈帧等。每个方法调用都会创建一个栈帧,方法返回时栈帧会被弹出。
  • 本地方法栈(Native Method Stack):用于执行本地方法(通常是用其他语言编写的代码),与Java栈类似,但专门用于处理与Java虚拟机交互的本地代码。
  • 程序计数器(Program Counter Register):跟踪当前线程所执行的字节码指令的地址,每个线程都有一个程序计数器。

3.执行引擎(Execution Engine):

负责解释和执行字节码。

  • 解释器(Interpreter):直接逐条解释执行字节码,适用于解释型执行模式。
  • 即时编译器(JIT Compiler):将热点字节码编译成本地机器码以提高性能。编译后的代码会被缓存,以便在后续执行中重复使用。提高了执行效率。

4.垃圾回收器(Garbage Collector)

负责自动管理和回收JVM中的内存资源,当对象不再被引用时,垃圾回收器会自动回收其占用的内存,以释放内存,减少内存泄漏和优化性能。

5.本地方法接口(Java Native Interface,JNI):

允许Java代码与本地(非Java)代码进行交互,支持调用C、C++等语言编写的本地方法。

6.本地方法库:这是一个集合,包含了用其他语言实现的本地方法。


http://www.kler.cn/news/289836.html

相关文章:

  • 深入探索JNI:基础、最佳实践、性能优化与安全策略
  • Mental-LLM——通过在线文本数据利用大型语言模型进行心理健康预测
  • 【高级编程】实用类详解(中)String类及其常用方法 含判断邮箱格式案例
  • springboot使用缓存
  • Java实现加密(六)国密SM2算法
  • 【Qt】QChart折线图
  • ROS 编程入门
  • 集成电路学习:什么是IP知识产权
  • 本地搭建 Whisper 语音识别模型实现实时语音识别研究
  • 单线程Redis:Redis为什么这么快
  • 【html】编辑器、基础、属性、标题、段落、格式化、 连接、头部、CSS、图像
  • 微服务日常总结
  • 【主机入侵检测】Wazuh解码器之JSON解码器
  • 24并发设计模式——线程池模式
  • 台球助教系统小程序源码开发与技术解析
  • LLM大模型学习:LoRA 大模型微调的利器
  • 第三届人工智能与智能信息处理国际学术会议(AIIIP 2024)
  • 在SpringMVC中用fmt标签实现国际化/多语言
  • 装饰器模式(Decorator Pattern)
  • MACOS安装配置前端开发环境
  • 北芯生命持续亏损:产能利用率不理想仍扩产能,销售费用越来越高
  • Python世界:文件自动化备份实践
  • 由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(一)
  • 工业交换机如何确保品质
  • glsl着色器学习(四)
  • 日常避坑指南:如何合理利用Swap优化MongoDB内存管理
  • Linux驱动开发基础(IRDA 红外遥控模块)
  • E6000物联网主机:打造智慧楼宇的未来
  • Linux:vim编辑器的基本使用
  • 不小心删除丢失了所有短信?如何在 iPhone 上查找和恢复误删除的短信