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

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

引言

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

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

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

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

java从编码到执行

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

这个过程就是:

  • javac将java源代码编译成了class文件
  • 将class文件通过classLoader类加载器加载到内存中
  • 通过JIT即时编译器和字节码解释器将class文件翻译汇编原语指令
  • 执行引擎操作
  • 最后下发给硬件操作系统进行执行

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

jvm跨平台

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

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

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

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

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

那么总结下来就是:

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

jvm到底是什么?

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

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

image.pngimage.png

它就是一本约定,里面规定了各种细节。

只要你自己随便写个什么语言,遵循了jvm这套规范你就能将你自创的语言交给JVM运行。

具体的规范请参考如下官网文档,感兴趣的可以翻看一下,有时间的可以深入研究一下。

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

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

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

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

相关文章
|
19小时前
|
前端开发 Java Android开发
基于Java的跨平台移动应用开发
基于Java的跨平台移动应用开发
|
1天前
|
前端开发 Java 开发工具
Java GUI编程:跨平台应用的设计与开发
Java GUI编程:跨平台应用的设计与开发
|
3天前
|
Java API
解决Java中跨平台兼容性问题
解决Java中跨平台兼容性问题
|
7天前
|
Java
java字符串分割split你用对了吗
java字符串分割split你用对了吗
12 1
|
11天前
|
网络协议 Java Linux
探索Java Socket编程:实现跨平台客户端-服务器通信的奥秘
【6月更文挑战第21天】Java Socket编程示例展示了如何构建跨平台聊天应用。服务器端使用`ServerSocket`监听客户端连接,每个连接启动新线程处理。客户端连接服务器,发送并接收消息。Java的跨平台能力确保代码在不同操作系统上无需修改即可运行,简化开发与维护。
|
14天前
|
IDE Oracle Java
Java 是一种跨平台的编程语言,可以在各种操作系统上运行。
Java 是一种跨平台的编程语言,可以在各种操作系统上运行。
|
25天前
|
Java 程序员
Java入门——JDK的组成、Java的跨平台、Path环境变量配置、Java_home环境变量
Java入门——JDK的组成、Java的跨平台、Path环境变量配置、Java_home环境变量
17 3
Java入门——JDK的组成、Java的跨平台、Path环境变量配置、Java_home环境变量
|
2月前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化移动应用开发的未来:跨平台框架与原生操作系统的融合
【5月更文挑战第29天】在Java开发中,并发编程是一个重要的议题。随着多核处理器的普及,如何充分利用多核资源,提高程序的执行效率,同时保证数据的安全性和一致性,成为开发者必须面对的挑战。本文将从线程安全的基本概念出发,探讨Java中的线程安全问题,并介绍一些常见的解决方案,如同步机制、锁优化等。最后,我们将通过实例分析,展示如何在保证线程安全的前提下,进行性能优化。
|
2月前
|
存储 Java 编译器
java和c++的主要区别、各自的优缺点分析、java跨平台的原理的深度解析
java和c++的主要区别、各自的优缺点分析、java跨平台的原理的深度解析
233 0
|
2月前
|
Java 测试技术 数据库连接
基于Java Web技术的跨平台应用开发策略探讨
基于Java Web技术的跨平台应用开发策略探讨