JVM基本组成

embedded/2024/10/20 4:11:03/

目录

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.ppmy.cn/embedded/119963.html

相关文章

xpath应用大全

一、xpath在爬虫中的应用 1、/div 表示从根节点开始选取div节点 2、/span 表示从根节点开始选取span节点 3、//a 表示选取文档中所有a节点而不考虑其位置 4、class 表示选取名为class的属性 5、 . 表示选取当前节点 6、 .. 表示选取当前节点的父节点 7、/div/a 表示从根…

uni-app进行微信小程序开发,快速上手

准备工作 IDE https://www.dcloud.io/hbuilderx.html 微信小程序开发工具 下载 / 稳定版更新日志 (qq.com) 安装流程 打开HBuilderX 点击这个logo打开终端 然后 下载一下终端插件 初始化一个demo 通过vue-cli命令行创建项目 uni-app官网 (dcloud.net.cn) (官…

Spring AOP异步操作实现

在Spring框架中,AOP(面向切面编程)提供了一种非常灵活的方式来增强应用程序的功能。异步操作是现代应用程序中常见的需求,尤其是在处理耗时任务时,它可以帮助我们提高应用程序的响应性和吞吐量。Spring提供了一种简单的…

高精度(1)——高精度减法

题目描述 给定两个正整数(不含前导 0),计算它们的差,计算结果可能为负数。 输入格式 共两行,每行包含一个整数。 输出格式 共一行,包含所求的差。 数据范围 1≤整数长度≤100000 输入样例 32 11 …

周成虎院士团队和朴世龙院士合作发表Nature Communications:中国植树造林的固碳潜力评估

本文首发于“生态学者”微信公众号! 编者荐语:以下论文是中国科学院地理科学与资源研究所周成虎院士研究团队和朴世龙院士近期合作发表的研究,研究发现在中国强烈的人地矛盾和耕林博弈背景下,相较于新增林地,加密现有…

Windows 命令

在 Windows 系统中,你可以使用命令行工具来执行各种任务,比如文件管理、网络诊断、系统维护等。下面是一些常用的 Windows 命令及其用途。 文件管理命令 dir:列出当前目录下的文件和子目录。 dircd:改变当前目录。 cd pathmd 或 …

数据结构2——单链表

在数据结构1——顺序表(C语言版)中,我们已经了解了顺序表的使用和实现,总结一下顺序表的优点: ①尾插尾删效率足够快; ②下标的随机访问和修改也足够方便。 可除此之外顺序表也确实存在着不足: …

Gson将对象转换为JSON(学习笔记)

JSON有两种表示结构,对象和数组。对象结构以"{"大括号开始,以"}"大括号结束。中间部分由0或多个以”,"分隔的”key(关键字)/value(值)"对构成,关键字和值之间以":"分隔,语法结…