[Java]浅谈Java/JavaScript的一次编写,到处运行

一.Java跨平台的基础是JVM(Java Virtual Machine)

JVM是一个软件,它基于不同的操作系统和处理器实现了不同的版本,JVM本身是依赖于操作系统的,它仅仅是一个容器,用来解释Java字节码,翻译成不同操作系统和处理器下的机器码。
最典型的例子,在C、C++中的基本数据类型被JVM统一了实现,这得益于JVM的翻译能力,它实现了不同操作系统下的具体实现。
JVM把操作系统移植的兼容性部分对程序员屏蔽了,我们不需要看到具体的C的各种适配操作系统和处理器的条件宏和数据类型转换,以及系统API的差异。统一由JVM重新封装了,因此可以理解为一个中间件,类似于我们的对各种第三方框架的抽象和封装,让它表面上是有统一的行为,对具体实现不可见。

二. 分层


1.Byte Code(Java, OS 独立) -> 一次编码,到处运行


2.JVM(C/C++实现,OS和处理器相关) -> 字节码解释成机器码


3.Binary Code(机器语言,处理器相关)


三.跟JavaScript在各大浏览器中兼容性比较

JavaScript/HTML等具有类似的特性,一次编写,跨浏览器支持。
原理类似,各浏览器自身是一个程序或者说软件,我们理解成容器,它负责将JS/HTML代码解释,然后渲染。

但是我们知道,不同的操作系统中的系统API是不同的,MacOS和Windows下的可执行程序的架构是不同的,二进制程序汇编指令也是不同的,因此跨平台的基础就是中间件屏蔽了这些差异,这个中间件就是浏览器。当我们在JS中调用canvas等api渲染界面的时候,浏览器仍然需要将这些操作解释成系统级别的API,最终调用操作系统的API去绘制图形,因为只有操作系统自身才能调用到硬件来绘制界面到真实的显示器上(中间是各种驱动)。

猜你喜欢

转载自blog.csdn.net/annkie/article/details/82767706
今日推荐