Write once, compile anywhere,“一次编译,到处运行”的著名口号大家想必都听说过吧
一次编译:把java代码(.java文件)通过编译器转换成字节码(.class文件)(符合java规范的二进制数)
到处运行:指的也就是java的跨平台性,即相同的字节码放在不同的操作系统上,运行出来的结果依旧是一样的。

java不仅仅只是狭义的一门高级语言,更是一种java体制

到这里我还是对Write once, compile anywhere没有任何概念,难道别的高级语言就不可以吗。

我们来看看另一门高级语言c语言。我们编写了一个hello.c文件,linux下编译结果是hello,window下编译结果是hello.exe,而mac下编译结果是hello.out。我们无法把别的平台下的编译结果拿到当前平台下进行运行。
仅仅只是因为后缀名(扩展名)不同导致的吗,我们把c语言编译后的结果后缀名都统一成一种格式就可以了吗?当然不是!即使面对的是同一个后缀名的执行程序,不同的平台,不同的芯片,不同的环境(32位,64位)的指令集合也完全不同。编译出来的结果也千差万别

仔细想想电脑所有的文件都是二进制文件,不同的是操作系统需要通过不同的后缀名来使用不同的软件打开该文件。所以错不在后缀名上,错在不同操作系统解析这些二进制代码的方式各有所不同,产生的结果也各不相同。

举个例子 现在写了一个马冬梅.c 的程序(printf(“我叫马冬梅”)),将它放在不同系统中执行的结果
window(32位):我叫马梅
window(64位):我叫马冬梅
linux:我叫马东
mac:我叫冬梅

java虚拟机定义的二进制格式,这种我们称之为 字节码(ByteCode),是java虚拟机所能运行的格式

那么JVM又是怎么实现跨平台的呢?
首先指定规则告诉编译器我们不搞特殊,我们所有平台都一视同仁,你们编译出来的java代码的后缀必须是.class文件,到这一步,其实也没有解决实质性的问题,就是操作系统不能正确解析字节码。
既然操作系统解决不了的问题,那么我们自己解决,我们在操作系统前来解析这些字节码。

打一个比方,将这些操作系统比作windows比作美国人,mac比作韩国人,Linux比作日本人。
如果这个时候我们对他们说我爱你,他们当然听不懂。但是可以使用一个类似翻译机的东西
我爱你->英语翻译器->I love you 美国人(windows)听懂了
我爱你->韩语翻译器->사랑해 韩国人(mac)听懂了
我爱你->日语翻译器->あなたのことが好きです 日本人(Linux)听懂了

这翻译器都做是同一个工作就是让外国人听懂(操作系统执行正确的指令)。JVM就是这些翻译器,尽管平台再多,我们对应每一个平台我们都给他整一个翻译器。然后我们收到的必须是中文(规定编译器解析出同一个类型的文件.class),我们就能翻译个外国人听,让他们听懂(JVM执行字节码,得到相同的结果)

软件都要根据平台下载,有些还要严格区分32位/64位

jvm也不另外(不同款式的翻译机,操作系统找到适合自己的翻译机就能运行啦)

总结:原来jvm的存在已经为我们解决解决了跨平台的问题,也解决了GC(垃圾回收,再后面会提到),内存管理......当然有利就有弊,在算法网站可以明显看到同样的算法运行时长最短的永远是c/c++。
最后说一点我对跨平台的看法:我个人觉得java的跨平台的特性十分适合于技术适合网络世界,当请求调用服务时:java对象被序列化成二进制流/java类的字节码文件传输到别的机器上的时候能快速的通过java虚拟机解析出来,执行下一步操作,而不再需要考虑机器类型。

关于java的跨平台特性的更多相关文章

  1. Knowledge Point 20180506 深究Java的跨平台特性

    本章主题:从骨子里看Java的跨平台;本文内容部分摘自https://www.cnblogs.com/roger-yu/p/5827452.html 有过基础Java知识的开发人员都知道Java是跨平 ...

  2. 如何理解JAVA的跨平台特性

    1.java的跨平台,是指java在运行时是凌驾于os之上,是在jvm中运行的,跟os没有直接联系. 2.java跨平台主要是由java的编译方式决定的,因为java是通过jvm先编译再执行,它编译的 ...

  3. java基础二 java的跨平台特性

    一:java跨平台的特性: 1.生成不平台无关系的字节码. 2.通过和平台有关的jvm即java虚拟机来执行字节码.jvm不跨平台. 图示: 疑问:1.为什么我们不直接写字节码? 因为字节码只有jvm ...

  4. Java的跨平台特性

    语言跨平台是编译后的文件跨平台,而不是源程序跨平台.Java源代码首先经过编译器生成字节码,即class文件,该class文件与平台无关,而class文件经过解释执行之后翻译成最终的机器码,这是平台相 ...

  5. IT兄弟连 Java语法教程 Java语言的跨平台特性

    什么是平台 Java是可以跨平台的编程语言,那么首先我们需要知道什么是平台,通常我们把CPU与操作系统的整体称为平台. CPU大家都知道,是计算机的大脑,它既负责思维运算,又负责计算机中各种零部件的命 ...

  6. java发展史与java的语言特性

    概述: Java 体系比较庞杂,功能繁多,这也导致很多人在自学 Java 的时候总是感觉无法建立 全面的知识体系, 无法从整体上把握Java 的原因. 在这里我们先简单了解一下Java 的版本. 具体 ...

  7. 示例解读Java的跨平台原理

    首先简单的解释一下Java跨平台的特征,相当于说写一个Java程序论述上可以运行在不同的操作系统平台上面(此处的平台我们就简单的看成是操作系统平台).下面我们用一些事例来说明它的好处. 我们先了解一些 ...

  8. Java 8新特性解读

    (四)Java 8 相关知识 关于 Java 8 中新知识点,面试官会让你说说 Java 8 你了解多少,下面分享一我收集的 Java 8 新增的知识点的内容,前排申明引用自:Java8新特性及使用 ...

  9. Java 浅析三大特性之一继承

    上文Java 浅析三大特性之一封装我们说到Java是一个注重编写类,注重于代码和功能复用的语言.Java实现代码复用的方式有很多,这里介绍一个重要的复用方式--继承. 在介绍继承之前,我们要明确一点, ...

随机推荐

  1. failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected 排坑指南

    训练maskrcnn时,出现了 failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected 一开始以 ...

  2. javeEE第五周

    一.定义 AndXML”(异步Javascript和XML),是指一种创建交互式网页应用的网页开发技术.AJAX = 异步JavaScript和XML(通用标记语言的子集),是一种用于创建快速动态网页 ...

  3. 【基于微信小程序的社区电商平台】第一次迭代心得(非正式版本

    一.迭代任务 团队在第八周确认迭代计划时,是想要在第一阶段实现电商小程序的核心功能,就是买和卖,也是前端和后台数据交换的核心模块.涉及到首页浏览商品信息,查看商品详情及评论,选择加入购物车.关注卖家以 ...

  4. Visual Studio 2017 离线安装包

    vs_community.exe --layout D:vs2017offline-en --add Microsoft.VisualStudio.Workload.ManagedDesktop -- ...

  5. jquery.validate.js使用实例

    一.常用方式: $('form').validate({  rules: {},        messages: { },        submitHandler: function () {}) ...

  6. 基于.NET平台常用的框架整理<转载>

    转载来自:http://www.cnblogs.com/hgmyz/p/5313983.html 基于.NET平台常用的框架整理   自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大 ...

  7. JSP学习(2)---四种基本语法与三种编译指令

    JSP的异常可以不处理,即使是checked异常. 四种基本语法: jsp声明,jsp注释,jsp表达式,jsp脚本 三种编译指令: page,include,taglib 下面是具体的练习. sho ...

  8. servlet中常用到的工具

    1. 解析ajax传来的json字符串,得到json对象 private JSONObject getJsonObject(HttpServletRequest req) { StringBuffer ...

  9. 2017-10-5模拟赛T2 小Z爱排序(sorting.*)

    Description Solution 比赛时找到了规律,但是没有证出来……(当然最后还是AC了……) 显然没有被操作的数在排好序的序列中一定是连续的一段. 所以,没有被操作的数一定从左到右连续地递 ...

  10. 启动fiddler导致浏览器无法上网的解决方法

    1. 开发fiddler,进入Tools->Fiddler Tools,按照如图3部配置,即可实现无法上网的问题. 2. 见图1: 3.见图2: 4.见图3. 4. 完成以上配置后,重启fidd ...