深入理解Java跨平台原理

这篇文章的主题是总结下对Java语言特点中的跨平台原理.

在这之前,我们先了解下计算机语言为什么不能跨平台.

跨平台分两个层面 硬件层面 系统层面

先说硬件层面

计算机只能识别由"0"和"1"组成的二进制数.

那么随便给计算机一组0101的二进制数计算机就能识别么?

当然不是!

以人为例

人是可以识别声音的。

这样一个场景:房间里坐着3个人,分别是中国人、韩国人和美国人。

现在你需要分别和他们打招呼。

怎么办,跑到每个人面前吼一声可以不?

搞不好,人家会以为你在骂他.

所以这时就需要分开来了

中国人说:你好

韩国人说:阿尼哈撒哟

美国人说:Hello

这样人家才能知道是打招呼,而不是在骂他.

因为他们只能接受特定的打招呼的语言.

那回到计算机!

每台计算机出厂的时候就预先设定好它能识别的一组指令存放在计算机中叫指令集。而每家公司出厂的计算机设定的指令集又可能不同,所以需要针对特定的计算机编写特定的程序。

就和上面列子一样,3种不同的计算机可能需要写3套程序。

同样一件事情需要做3次,如果再有几种计算机可能还有更多次,麻不麻烦?自己感觉下

那硬件层面是否可以跨平台?

答案是肯定的,最好的例子就是AMD和Intel.

既然上面的问题是由于不同的计算机厂商设置不同的指令集产生的,那把指令集统一就可以解决上面硬件层面的跨平台问题.

所以AMD和Intel现在都统一支持x86指令集(64位的叫x64).这样只需要针对特定的指令集编写程序就行.从而解决了硬件层面的跨平台.

其实硬件层面的跨平台不是我们该操心的,只有操作系统才是直接运行在硬件上.

我们编写的是应用程序,应用程序是运行在操作系统上,所以系统层面的跨平台才是我们关注的.

硬件层面的跨平台都解决了,系统层面怎么又出来了跨平台问题?

我们以Windows、Linux和Mac为例

Windows linux和Mac通过X86指令集可以控制AMD和Intel CPU

那我们写的应用程序运行在这3个系统上有什么问题

这里我们以C语言来说明下

有句话叫"一次编写,到处编译",说的就是c语言这类编译型语言.

意思是只需要编写一次C语言的源文件,然后在不同的操作系统上编译一次就可以使用.

如果只是编译一下,也挺省事的.

那这个理念是否可以实现?

理论上可以.

为什么是理论上?

如果是使用C标准库中提供的API接口进行编程,那么"一次编写,到处编译"是完全可以实现的.

可是C标准库中实现的接口实在太少了,不够用!

这样每个操作系统厂家又扩展了自己的系统类库.

比如Windows下的MFC(微软基础类库)你在Windows下编写程序调用MFC下的接口,编译和运行是没问题的。但到Linux下就会编译不过,因为编译器找不到MFC的接口.那这个代码在Linux就使用不了.

这就产生了计算机语言跨平台的问题.本质上来说不是语言不能跨平台,而是语言编写过程中所使用的系统库不能跨平台.

难道C语言就不能夸平台了吗? 可以研究下QT

接下来我们来说说Java怎么解决这个问题,实现跨平台.

我们可以看出Java的编写过程:

首先编写Java源文件,通过Java编译器生成后缀为.class的字节码文件,这文件不和特定的操作系统相关,然后通过JVM解释执行.

所以Java也叫解释型语言.

Java跨平台的重点就在JVM上,由于.class字节码文件不和特定的操作系统相关需要解释执行.

那么只要能解释执行.class文件就可以执行Java程序.

所以曾经的SUN公司在不同的操作系统上开发出不同的JVM用于解释执行Java程序.以此实现Java 的跨平台.

从而得出 Java语言是跨平台的,但JVM是不跨平台的.

那是不是只有Java是跨平台的呢?

PHPPython、Ruby、Perl 等均在旁边笑而不语

时间: 2024-08-08 05:38:08

深入理解Java跨平台原理的相关文章

Java跨平台原理

此篇博文主要源自网络xiaozhen的天空的博客:http://xiaozhen1900.blog.163.com/blog/static/1741732572011325111945246/ 1.是么是平台 Java是可以跨平台的编程语言,那我们首先得知道什么是平台,我们把CPU处理器与操作系统的整体叫平台. CPU大家都知道,如果计算机是人,那CPU就是人的大脑,它既负责思维运算,又负责身体各部件的命令控制.CPU的种类很多,除去我们熟知的Intel与AMD外,还有比如上面说到的SUN的Sp

【转】Java跨平台原理

原文地址:http://www.cnblogs.com/gw811/archive/2012/09/09/2677386.html 1.是么是平台 Java是可以跨平台的编程语言,那我们首先得知道什么是平台,我们把CPU处理器与操作系统的整体叫平台. CPU大家都知道,如果计算机是人,那CPU就是人的大脑,它既负责思维运算,又负责身体各部件的命令控制.CPU的种类很多,除去我们熟知的Intel与AMD外,还有比如上面说到的SUN的Sparc,比如IBM的PowerPC等等,这些各个公司生产的CP

Java 跨平台原理

Java的跨平台基于一个编译器和不同平台的多个虚拟机.其中,CPU处理器和操作系统的整体称为平台.Java编译器把Java源文件编译成与平台无关的基于Unicode的字节码class文件,JVM把该文件解释成与平台有关的机器码指令,可以在不同平台上执行. 参考资料 为什么JAVA可以跨平台? Java跨平台原理 原文地址:https://www.cnblogs.com/WJQ2017/p/8438261.html

深入理解JAVA多态原理

之前一直知道多态是什么东西,平时敲代码也经常用到多态,但一直没有真正了解多态底层的运行机制到底是怎么样的,这两天才研究明白点,特地写下来,跟各位同学一起进步,同时也希望各位大神指导和指正. 多态的概念:同一操作作用于不同对象,可以有不同的解释,有不同的执行结果,这就是多态,简单来说就是:父类的引用指向子类对象.下面先看一段代码 1 package polymorphism; 2 3 class Dance { 4 public void play(){ 5 System.out.println(

深入理解Java 注解原理

*注解的用途 注解(Annotation)是JDK1.5引入的新特性,包含在java.lang.annotation包中,它是附加在代码中的一些元信息,将一个类的外部信息与内部成员联系起来,在编 译.运行时进行解析和使用.Java内置了一些注解(如@Override.@Deprecated等),还支持自定义注解,一些知名的框架 Struts.Hibernate.Spring都有自己实现的自定义注解,也可以自己定义注解供使用. Annotation十分类似public.final这样的修饰符.每个

示例解读Java的跨平台原理

首先简单的解释一下Java跨平台的特征,相当于说写一个Java程序论述上可以运行在不同的操作系统平台上面(此处的平台我们就简单的看成是操作系统平台).下面我们用一些事例来说明它的好处. 我们先了解一些基本常识,计算机的由硬件和软件组成,软件又分为系统软件和应用软件.在硬件上面先安装系统软件,在系统软件上面安装应用软件,并且它们相互之间存在是否兼容的问题,如下(图3-1)所示: (图3-1) 软件之间的兼容性问题我们看下面一个示例(图3-2): (图3-2) 我们在下载软件的时候经常会看到上图这样

Java的跨平台原理

JAVA的跨平台原理 JAVA的跨平台原理 Java是一种简单易用.完全面向对象.有平台无关性.安全可靠的.主要面向Internet的开发工具.Java自从1995年正式面世以来,它的快速发展已经使整个Web世界发生了翻天覆地的变化.随着Java Servlet的推出,Java在电子商务方面开始崭露头角,最新的Java Server Page(JSP)技术的推出,更是让Java成为基于Web应用程序的首选开发工具. Java是第一套允许使用者将应用程序通过Internet从远端服务器传输到本地机

Java虚拟机及跨平台原理

Java虚拟机及跨平台原理 Java Virtual Machine(JVM) 是可运行java字节码的假象计算机,java的跨平台性是相对其他编程语言而言的,用C语言的编程和执行过程来同java的编程和执行过程进行对比: 同C语言一样,首先也要编写java源程序,然后由java编译器将java源程序编译为JVM可执行的代码,即java字节码,java源程序编译后生成的字节码文件就相当于C源程序编译后的windows上的exe可执行文件,JVM相当于计算机系统(操作系统+硬件环境),在windo

深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)视频教程

14套java精品高级架构课,缓存架构,深入Jvm虚拟机,全文检索Elasticsearch,Dubbo分布式Restful 服务,并发原理编程,SpringBoot,SpringCloud,RocketMQ中间件,Mysql分布式集群,服务架构,运 维架构视频教程 14套精品课程介绍: 1.14套精 品是最新整理的课程,都是当下最火的技术,最火的课程,也是全网课程的精品: 2.14套资 源包含:全套完整高清视频.完整源码.配套文档: 3.知识也 是需要投资的,有投入才会有产出(保证投入产出比是