Java跨平台你真的理解对了吗?

文章探讨了Java的跨平台特性,解释了JVM如何使代码能够在不同操作系统上运行。JVM作为规范定义了如程序计数器、运行时数据区等组件,并通过类加载器加载class文件,然后通过解释器和JIT编译器执行。JVM的跨平台能力使得开发者无需关注底层操作系统差异,只需关注Java代码的编写。文章还提到了JDK、JRE和JVM之间的关系,以及JVM的不同实现和其作为规范的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

朋友最近去面试,直接被一个基础问题pass了。面试管的问题是:你怎么看待java是跨平台的说法?

这是一个综合性的实力考察问题,朋友的回答很简单:java跨平台的说法不对,那是因为它运行在jvm上,jvm是跨平台的。

当时朋友说回答了后觉得自信满满,但是后面的问题面试官就有一些敷衍了,随便问了一些基础和项目上的问题就打发他回去等通知了,结果可想而知,面试肯定挂了。

相信大家都知道jvm跨平台整个概念,但是可能没有真的理解对,jvm为什么能够跨平台,今天大家伙就跟着我的思路理解理解。

java从编码到执行

首先来说,大家在java学习入门时都会安装jdk环境变量,手写java文件然后运行javac将*.java编译成*.class文件,然后再用java命令运行。

这个过程首先要说的就是javac将java源代码编译成了class文件,jvm就能将class文件通过classLoader类加载器加载到内存中,通过动态编译JIT即时编译器和字节码解释器将class文件翻译汇编原语指令,然后就要执行引擎,最后下发给硬件操作系统进行执行。

image.png

整个将class文件解释并且给到操作系统执行的这一套组件都属于jvm范畴。

jvm跨平台

除了java语言能在jvm上运行,其他还有超过百种语言都在jvm上运行,比如scala、kotlin、groovy等等。

jvm根据不同的操作系统有自己对应的实现帮助用户屏蔽了操作系统底层的逻辑。

image.png

对于用户来说,简单来说就是我们使用java的用户来说,我们不用关心我们的java代码会因为在Linux、windows、andriod等不同的操作系统上运行需要我们针对操作系统的对应实现。

我们只需要关心我们的java代码怎么编写和实现,jvm最后去负责和不同的操作系统打交道。

就好比你只会中国话,你去环球旅行找了个导游,这个导游会多国语言,你的所有需求都由他传递给不同国家的人,他最后将他国语言翻译成中文讲给你,你不需要去学习其他语言。

那么总结下来就是:

jvm跟java无关,jvm只看class文件,只要能变成class文件,jvm就能加载。

image.png

jvm到底是什么?

  • jvm是一种规范,它约定了我们知道的诸如程序计数器、运行时数据区、堆、虚拟机栈、本地方法栈等等,以及哪些汇编指令代表什么操作等等的一系列有关计算机交互的定义。

来看看最新jdk19的官方白皮书

image.png

image.png

image.png

image.png

它就是一本约定,里面规定了各种细节,只要你自己随便写个什么语言,遵循了jvm这套规范你就能将你自创的语言交给jvm运行,具体的规范请参考如下官网文档,感兴趣的可以翻看一下,有时间的可以深入研究一下。

java virtual machine specifications
https://docs.oracle.com/en/java/javase/19/
https://docs.oracle.com/javase/specs/index.html

总结一下百度一搜就能出来的结果:

  • jvm是虚构出来的一台计算机

    字节码指令集(汇编语言)
    内存管理:栈 堆 方法区等

常见的jvm实现

既然jvm是一套规范,必定有很多实现厂商,常见的jvm实现如下:

image.png


JDK 、JRE 、JVM三者关系

JDK(java development kit):编译环境。JDK 是整个 Java 开发的核心,它集成了 JRE 和一些例如:javac.exe,java.exe,jar.exe 等工具。JDK包括了Java运行环境JRE、一堆Java工具(javac、java等)和Java基础的类库(即Java API 包括rt.jar),整体构成了java编译环境。

JRE (java runtime environment):运行环境。负责装载用户自定义的类(分为从本地装载和从网络装载两种)和java API类。

JVM :虚拟计算机,俗称jvm虚拟机,负责将字节码解释成机器码并提交操作系统执行。

所以三者间的关系如下:
jdk > jre > jvm

image.png

总结

今天带大家又进一步理解了jvm这一个概念,相信你对jvm又有了不同的体会,而且建议收藏本文,如果你是刚刚入门,读起来可能难理解,后面可以在有一定基础后再来看此文,会有不同的收获

如果你是老鸟,看到此文或许能引发你更多的思考,特别是可能让你想起某次jvm面试题,或许你也有兴趣研究一下.class文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全粘架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值