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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【AI算法岗面试八股面经【超全整理】——深度学习】
  • PLC Twincat3 对传感器数据滑动平均滤波
  • HTML与JavaScript结合实现简易计算器
  • hadoop大数据平台操作笔记(上)
  • 聚合函数count 和 group by
  • Android Input系统原理一
  • MAC如何获取文件数字签名和进程名称
  • QT开发: Qt 框架中字符串核心类QString详解
  • Linux上Java项目环境安装
  • 深度学习:常见损失函数简介--名称、作用和用法
  • Git基本用法总结
  • Spring AOP - 配置文件方式实现
  • 字节跳动的微服务独家面经
  • 52 文本预处理_by《李沐:动手学深度学习v2》pytorch版
  • docker面经
  • 【css3】浏览器内核及其兼容性
  • 230. Kth Smallest Element in a BST
  • Android单元测试 - 几个重要问题
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Angular 响应式表单之下拉框
  • C# 免费离线人脸识别 2.0 Demo
  • HTTP请求重发
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Java多态
  • Java-详解HashMap
  • Sass 快速入门教程
  • 分享一份非常强势的Android面试题
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 开发基于以太坊智能合约的DApp
  • 如何编写一个可升级的智能合约
  • 详解NodeJs流之一
  • 小程序开发之路(一)
  • 一个完整Java Web项目背后的密码
  • 用Canvas画一棵二叉树
  • - 转 Ext2.0 form使用实例
  • puppet连载22:define用法
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​渐进式Web应用PWA的未来
  • # Maven错误Error executing Maven
  • #数据结构 笔记一
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (0)Nginx 功能特性
  • (09)Hive——CTE 公共表达式
  • (2)STM32单片机上位机
  • (2015)JS ES6 必知的十个 特性
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (done) 声音信号处理基础知识(2) (重点知识:pitch)(Sound Waveforms)
  • (补)B+树一些思想
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (黑马C++)L06 重载与继承