《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项目启动后,第一次运行代码的时候可能会相对以后运行较慢。

相关推荐
二哈赛车手4 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
栗子~~5 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
YDS8295 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
未若君雅裁6 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
AI人工智能+电脑小能手7 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
阿维的博客日记7 小时前
Nacos 为什么能让配置动态生效?(涉及 @RefreshScope 注解)
java·spring
雨辰AI7 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
辰海Coding8 小时前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构
小小编程路9 小时前
C++ 多线程与并发
java·jvm·c++
AI视觉网奇9 小时前
linux 检索库 判断库是否支持
java·linux·服务器