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也在不断地进行优化和改进。

相关推荐
阿龟在奔跑11 小时前
引用类型的局部变量线程安全问题分析——以多线程对方法局部变量List类型对象实例的add、remove操作为例
java·jvm·安全·list
王佑辉11 小时前
【jvm】方法区常用参数有哪些
jvm
王佑辉11 小时前
【jvm】HotSpot中方法区的演进
jvm
Domain-zhuo11 小时前
什么是JavaScript原型链?
开发语言·前端·javascript·jvm·ecmascript·原型模式
Theodore_10221 天前
7 设计模式原则之合成复用原则
java·开发语言·jvm·设计模式·java-ee·合成复用原则
我是苏苏1 天前
Web开发:ORM框架之使用Freesql的DbFrist封装常见功能
java·前端·jvm
天草二十六_简村人2 天前
Java语言编程,通过阿里云mongo数据库监控实现数据库的连接池优化
java·jvm·数据库·mongodb·阿里云·微服务·云计算
老码沉思录2 天前
Android开发实战班 - 数据持久化 - Room 数据库应用
android·jvm·数据库
起名字真南2 天前
【C++】深入理解 C++ 中的继承进阶:多继承、菱形继承及其解决方案
java·jvm·c++·chatgpt·aigc
偶尔。5352 天前
JVM垃圾回收算法详解
jvm