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

JVM基本组成

目录

JDK\JRE\JVM

架构

Java执行流程

工作原理

类型

优点

缺陷


JDK\JRE\JVM

  • JDK:全称“Java Development Kit”,Java开发工具包,提供javac编译器jheap、jconsole 等监控工具;
  • JRE:全称“Java Runtime Environment”,Java 运行环境,提供 class Library 核心类库 +JVM;
  • JVM:全称“Java Virtual Machine”,Java 虚拟机,用于运行 Java 应用程序;

JVM(Java虚拟机)是一个能够执行Java字节码的虚拟机,它是Java运行时环境的核心部分。JVM使得Java程序可以在不同的操作系统上运行,而无需修改代码,这一点通过Java的“一次编写,到处运行”(Write Once, Run Anywhere)的理念得以实现。下面是JVM的详细解析:

架构

JVM的架构可以分为三个主要部分:

  1. 客户端:用户通过它与JVM交互,提供Java程序的字节码。
  2. 执行环境:包括执行引擎、执行栈和执行堆。
    • 执行引擎:负责解释或编译Java字节码,并执行。
    • 执行栈:每个线程都有自己的执行栈,用于存储方法调用和局部变量。
    • 执行堆:所有对象实例和类实例变量都存储在这里,也是垃圾回收发生的地方。
  3. 服务器:提供JVM运行时所需的服务,如内存管理、线程管理等。

Java执行流程

        1.编译:通过javac命令,调用JDK编译器,将*.java文件编译成*.class字节码文件。

        2.执行:通过java命令,调用JVM虚拟机,执行*.class字节码文件。

工作原理

  1. 加载:类加载器将类的字节码从文件中读入内存。
  2. 验证:确保字节码符合JVM规范。
  3. 准备:为类变量分配内存空间。
  4. 解析:将类、接口、字段和方法的引用转换为直接引用。
  5. 初始化:执行静态初始化块和静态变量赋值。
  6. 执行:JVM执行字节码,可以是解释执行或编译后的本地代码执行。
  7. 垃圾回收:自动回收不再使用的内存空间。

类型

JVM有多种实现,主要分为两类:

  • HotSpot:是Oracle/Sun公司开发的JVM,支持即时编译(JIT)技术,可以提高执行效率。
  • OpenJ9:由Eclipse Foundation开发,专注于低延迟和高吞吐量。

优点

  1. 跨平台性:JVM实现了“一次编写,到处运行”的理念。这意味着,只要有JVM支持的操作系统,Java程序就可以运行,无需修改代码。这大大提高了Java程序的可移植性。

  2. 安全性:JVM为每个应用程序提供了独立的运行环境(沙箱),限制了应用程序对系统资源的访问,从而增强了安全性。此外,JVM还提供了各种安全机制,如访问控制、代码审计等,以防止恶意代码执行。

  3. 性能优化:JVM通过即时编译(JIT)技术将Java字节码转换为本地机器码,这样可以显著提高程序的执行效率。此外,JVM还具有高效的垃圾回收机制,可以自动管理内存,减少内存泄漏的风险。

  4. 稳定性和可靠性:JVM经过广泛的测试和优化,提供了稳定可靠的运行环境。它能够处理各种异常情况,保证程序的稳定运行。

  5. 丰富的库和工具:Java拥有丰富的标准类库和第三方库,以及强大的开发和调试工具,这使得开发者可以快速开发高质量的应用程序。

  6. 易于学习和使用:Java语言简洁明了,有着丰富的文档和社区支持,使得初学者容易上手,同时也满足了专业开发者的需求。

  7. 并发编程JVM提供了强大的并发编程支持,包括多线程、同步机制、并发集合等,这使得开发高性能的并发应用成为可能。

        总的来说,JVM的设计和实现使得Java成为了一个功能强大、易于使用、安全可靠的编程语言,适用于各种规模的应用开发。

缺陷

  1. 内存管理:JVM的垃圾回收机制虽然自动化,但有时会导致性能问题。长时间运行的应用可能会遇到停顿(Pause)问题,特别是在大量对象创建和销毁的场景下。

  2. 性能调优:虽然JVM提供了即时编译等技术来优化性能,但性能调优仍然是一个复杂的过程。开发者需要深入理解JVM的工作原理,才能有效地进行性能调优。

  3. 启动时间:由于JVM需要加载类、验证、准备、解析和初始化等步骤,因此启动时间相对较长。这在某些需要快速启动的应用场景中可能成为瓶颈。

  4. 内存使用:JVM的内存使用模式可能不适合所有应用。例如,在高内存负载的应用中,JVM的默认设置可能不足以满足需求,需要手动调整。

  5. 跨平台性能差异:虽然JVM实现了跨平台性,但不同操作系统上的JVM性能可能有所差异。这可能会影响到应用程序的性能表现。

  6. 安全性:尽管JVM提供了沙箱环境,但仍然存在安全漏洞的风险。特别是在处理不可信代码时,需要格外小心。

  7. 资源占用:JVM运行时占用的资源(如内存)通常比其他语言运行时更多,这可能会成为资源受限环境下的一个问题。

总的来说,虽然JVM在很多方面都表现出色,但在内存管理、性能调优、启动时间、内存使用、跨平台性能差异、安全性和资源占用等方面仍有改进空间。随着技术的发展,JVM也在不断地进行优化和改进。


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

相关文章:

  • Redis的数据类型常用命令
  • Python 学习入门笔记
  • smartctl 命令:查看硬盘健康状态
  • 【低功耗防山火在线监测装置】
  • nginx相关操作
  • selenium模块入门
  • 【Rust练习】16.方法和关联函数
  • helm部署ingress-nginx
  • Docker-2.如何保存数据退出
  • 什么是文件完整性监控(FIM)
  • ComfyUI新版本快捷键大全,快速提升效率,建议收藏
  • CMake教程(八):添加定制命令和生成的文件
  • 如何使用ssm实现白云会议管理系统+vue
  • mysql学习教程,从入门到精通,SQL 修改表(ALTER TABLE 语句)(29)
  • AI驱动TDSQL-C Serverless 数据库技术实战营-与AI的碰撞
  • Android 属性contentDescription详解
  • 斩获亚马逊“商采转型之星”奖 ,益而益(ELEGRP)品牌出海正当时
  • fatfs API使用手册
  • 《深度学习》卷积神经网络CNN 实现手写数字识别
  • 【C++打怪之路Lv4】-- 类和对象(中)
  • 方法 WebDriverWait
  • Java应用文件上传超出默认大小
  • 【888题竞赛篇】第十二题,2024ICPC网络赛第二场-游戏(Game)
  • 【容器云】容器云设计方案
  • Linux编译部署PHP环境
  • 冒泡排序-C语言
  • 程序员如何提升核心竞争力——深度耕耘与软技能的培养》
  • HTML元素居中
  • 一款好用的远程连接工具:MobaXterm
  • Xcdoe快速更新安装的小Tips