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

JVM原理(一):JVM基础知识

一、概述

JVM是java程序运行的基础环境,也是作为java开发必须了解的重要知识。了解jvm的基础知识可以帮助开发人员写出更高效的运行代码,也可以提升程序的性能。
jvm可以理解为一种虚拟机,它的职责就是将编译之后的字节码转化为机器可以执行的的代码。同时它具备资源管理能力,比如线程管理,内存分配及垃圾回收等功能。

二、JVM、JRE、JDK的区别

在java开发中,我么经常看到JVM、JRE、JDK名词,他们之间有什么关联,以及对应的作用是什么?
在这里插入图片描述

  • JDK(Java Development Kit):java开发工具套件,为开发者提供java开发所需的环境,包括基础类库、javac 编译工具和javadoc 等工具。
  • JRE(Java Runtime Environment):java运行时环境,提供jvm 核心类库及支持文件等。
  • JVM(Java Virtual Machine) :java虚拟机,它接收字节码,并把它转化为机器可以读取和执行的代码。

三、JVM的基本特性

jvm区别于CPU使用的寄存器架构改用基于栈技术的实现,让它具备可移植性。使得java开发成本降低,同时也让开发不需要考虑平台的差异性。栈技术的优势,让jvm拥有以下的特性:

  • 可移植性:java代码可以在任何安装jvm的机器上运行,而不需要考虑平台的差异性
  • 内存管理:jvm提供了内存自动回收机制,对于不在使用的对象进行内存回收,降低内存溢出的风险
  • 即时编译:jvm在运行时会将热点代码编译成机器码进行缓存,从而提高运行效率。
  • 可观测:jvm提供各种监控接口及监控工具,可以让开发者调试提升系统的性能。

四、JVM 的构成

了解完jvm的特性,接下来我们看一下jvm的组成。jvm主要有三大系统组成分别为:类加载子系统,执行引擎和运行时数据区。
在这里插入图片描述

  • 类加载子系统:负责将编译完的字节码加载到内存中,并在运行到过程中解析和验证文件的准确性。
  • 执行引擎:负责将字节码编译成机器可以识别的代码,并执行代码逻辑。
  • 运行时数据区:用来存储程序执行期间的数据。提供程序运行时的内存空间,为程序的执行提供基础支持。

五、云原生的JVM

5.1 云原生开发趋势

元原生开发的趋势主要集中在无服务器(Serverless)、容器化、Kubernetes、分布式等。

  • 无服务器(Serverless):在云原生下,弱化了服务器的概念,将程序容器化,让开发者解决程序的问题,而不需要考虑基础设施的维护问题。
  • 容器化:区别于jvm这种基于开发语言的虚拟机,容器使用的是基于操作系统层面的虚拟化,给每个容器分配对应的资源,允许在容器内运行多个程序和进程。
  • Kubernetes:它在容器化部署和资源管理等方面展现的自动化、弹性伸缩和容错能力已经成为了现在架构的基础。
  • 分布式、弹性伸缩、微服务架构:
    云时代的系统开发需要支持大规模的分布式计算和存储,能有效应对海量数据处理和分析的需要。云计算平台提供了弹性的资源分配机制,应用可以根据业务需求自动伸缩计算资源。系统开发通常采用微服务架构,把系统分解成一组小型、独立的服务,每个服务都在自己的进程中运行,各自独立部署。

5.2 云原生下JVM存在的问题

  • 启动时间:jvm在启动的时候需要加载很多框架文件,加上其他的一些中间件的长连接,启动时间将以分钟计。
  • 启动性能:在启动的前期jvm都是使用解释器执行代码,运行一段时间后才会使用解释+即时编译段模式,所以启动前期的性能低下。
  • 占用内存:
  • 面向对象:面向对象占用的内存空间过多,头部header通知占用8个字节,用于存储整数值需要4个字节,但为了对齐用了32字节来存储。

5.3 JVM对云原生的支持

  • 对容器化的支持:在jdk 8之前,jvm无法感知容器的资源限制,经常会因为占用内存过大导致容器将进程kill 掉掉情况。而在jdk11 之后jvm增加了对容器资源的识别,可以根据容器的资源配置来合理的分配jvm资源的大小。
  • AOT技术:Ahead-Of-Time AOT编译技术,通过在jvm启动之前就把字节码文件编译成机器可识别的机器代码,在jvm启动时无需预热就可以达到最佳的性能。
  • 函数式编程支持的增强:基于函数式编程风格更加强调不可变性和无副作用的特性,产生的垃圾更少。
  • GraalVM:GraalVM支持AOT编译,这意味着它可以将Java程序编译成本地可执行文件,极大地减少了启动时间和内存占用,更适应在云原生环境下运行。

六、总结

JVM经历了过去辉煌的28年,但在已经来临的云时代,原有的优势面临着新的挑战,为了适应云时代高性能、高可扩展性、高可靠性和高安全性的要求,JVM也在努力地进行自我革新。
总的来说,JVM的发展方向主要包括3个方面。

  1. 首先是性能优化,通过提高性能和资源利用率来适应云原生时代的需求。其中最主要的技术是AOT编译器和JIT编译器的结合,以及JVM的内存管理和垃圾回收机制的优化。
  2. 其次是对容器化的支持,通过支持容器化和新的微服务架构以适应云原生时代的需求。其中最主要的技术是JVM的镜像化和容器化以及对容器化环境的适配。
  3. 最后是安全性和可靠性的提升,通过持续提高安全性和可靠性来适应新时代的要求。

http://www.kler.cn/a/572226.html

相关文章:

  • Linux本地部署DeepSeekR1-70B量化版
  • FastGPT 引申:奥运选手知识图谱构建与混合检索应用
  • 基于 HTML、CSS 和 JavaScript 的五子棋游戏
  • RabbitMq-消息确认机制-消息队列可靠投递
  • OCCT 学习笔记:创建瓶子教程的三个关键知识点
  • AI-前端开发webcrumbs.ai/frontend-ai,Fitten Code提高开发效率
  • 乡村振兴:农业RWA商业模型——数字化时代的土地价值重构与产业升级
  • 第五十三:v-model修饰符
  • 力扣-动态规划-583 两个字符的删除操作
  • 冒泡排序算法优化
  • JavaWeb——CSS
  • Unity 适用Canvas 为任一渲染模式的UI 拖拽
  • Excel-to-JSON v2.0.0发布,可以在Excel内部,把Excel表格转换成JSON,嵌套的JSON也能转
  • 数据结构(初阶)(四)----双向链表
  • 网络安全需要学多久才能入门?
  • 决策树(Decision Tree)案例分析
  • Halcon 车牌识别-超精细教程
  • Dolphinscheduler调度部署
  • 鸿蒙NEXT开发-应用/元服务签名
  • 算法基础 -- 字符串哈希的基本概念和数学原理分析