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

《JVM第1课》Java 跨平台原理

无痛快速学习JVM,欢迎订阅本免费专栏

JVM

Java的特性就是程序员一次编写,到处运行,意思是我们只需要写一份代码,就可以在不同的操作系统(windows、Linux、Mac OS等)中运行。但是不同的操作系统能看懂的指令是不同的,所以实现方式就是给每个操作系统开发一个Java虚拟机(JVM)。

JVM运行的过程是把我们代码编译后的字节码翻译成系统能识别的机器语言,不同的系统有不同的JVM,所以就实现了跨平台的特性。

字节码

或许我们会有疑问,为什么源代码需要先编译成字节码呢?JVM为什么不直接翻译源代码呢?

其实这里主要是出于性能的考虑,因为Java是高级编程语言,所谓高级就是更贴合人类的语言习惯,高级的代价就是更远离机器语言,从代码到机器语言这个转换过程变长导致效率低。先由编译器将源代码转换为一种简单的中间形式(即字节码),然后再由 JVM 来执行这个中间形式,是一个更为高效的设计方案。

除性能外字节码还有一个强大之处就是可以兼容多种语言,比如我们如果把 Kotlin 语言的代码也编译成字节码,那么当然也可以在 JVM 上运行。

Java 源代码通过 javac 编译器被编译成字节码文件,命令是javac HelloWorld.java,如果我们是在开发环境中工作,如 Eclipse 或 IntelliJ IDEA,那么这些 IDE 会自动为我们处理编译过程。

编译和解释共存

假设我们是机器,只能看懂中文,我们阅读英文小说有两种方式,一种是直接阅读中文译本,另一种是请个能看懂英文的人坐在我们旁边一句一句的解释给我们听,但是肯定是第一种方式效率高,这第一种方式就是“编译”,第二种方式就是“解释”。

Java是编译和解释共存的语言,编译发生在源代码编译成字节码时期,解释发生在JVM把字节码解释给操作系统运行的时期。但是如果仅仅是这样,那Java的运行效率还是低,因为字节码还是一行一行解释运行的,所以为了提高效率,JVM 中还有一个非常重要的技术,叫做 ****JIT(Just-In-Time)

JIT编译器可以在程序运行时动态地识别出哪些代码段是最常被执行的“热点代码”,然后把这些代码编译成机器语言存储在代码缓存区,以提高运行效率。JIT 编译器并不是一开始就对所有代码进行编译,而是根据代码的执行频率和重要性来决定何时进行编译。所以我们的Java项目启动后,第一次运行代码的时候可能会相对以后运行较慢。

http://www.lryc.cn/news/475077.html

相关文章:

  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-30
  • 加强版 第五节图像处理与视频分析
  • Orleans8.2入门测试
  • 【Linux 25】网络套接字 socket 概念
  • python openai 通过Function Call 创建自动化任务
  • 设计模式之责任链的通用实践思考
  • 前端用canvas绘图并支持下载
  • 【Mac】Homebrew
  • Python笔记之线程库threading
  • go 包管理
  • Js内建对象
  • AXI接口的实现逻辑和底层原理,在FPGA中如何实现AXI接口,一篇文章足以搞明白!!!
  • 《GBDT 算法的原理推导》 11-12计算损失函数的负梯度 公式解析
  • mysql设计
  • Android 斗鱼面经
  • 【机器学习】26. 聚类评估方法
  • linux 最多能创建多少个 TCP 连接?
  • 我为何要用wordpress搭建一个自己的独立博客
  • Linux系统每日定时备份mysql数据
  • 书生大模型第一关Linux基础知识
  • 机器学习之fetch_olivetti_faces人脸识别--基于Python实现
  • 【系统设计】深入理解HTTP缓存机制:从Read-Through缓存到HTTP缓存的交互流程
  • FLINK单机版安装部署入门-1
  • 深度学习-学习率调整策略
  • 【学员提问bug】小程序在onUnload里面调接口,用来记录退出的时间, 但是接口调用还没成功, 页面就关闭了。如何让接口在onUnload关闭前调用成功?
  • 【刷题13】链表专题
  • Python Turtle模块详解与使用教程
  • 【PTA】4-2 树的同构【数据结构】
  • Node.js——fs模块-同步与异步
  • Java基于微信小程序的私家车位共享系统(附源码,文档)