概述

代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。
——《深入理解Java虚拟机》(从这里可以看到,字节码是一种文件格式)

我们都知道计算机只认识 0 和 1,所以我们所写的程序也需要经过编译器翻译成由 0 和 1 构成的二进制格式才能由计算机执行。
如今的计算机依然只能识别 0 和 1,但是由于虚拟机的出现,我们可以不需要将编写好程序直接翻译成 0 和 1,只要翻译成虚拟机能够识别的格式,接着再交给虚拟机去解释执行这种格式的文件即可。

很多人都可能听说过关于 Java 语言的一句著名口号:“一次编写,到处运行(Write Once,Run AnyWhere)“。
而实现了这种可以“到处运行”的根本原因就在于——虚拟机。Sun公司以及其他虚拟机提供商提供了很多可以运行在各种不同平台上的虚拟机,而这些虚拟机都可以载入和执行同一种存储格式的文件——字节码(ByteCode)。这便是 Java 语言能够与平台无关的根本原因。

可能很多程序员都认为 Java 虚拟机就是用来执行 Java 程序的,但其实不然,虚拟机除了提供了平台无关性这种能力之外,还具备了与语言无关的特性。 目前已经出现了很多种可以运行在 Java 虚拟机上的语言了,如 Kotlin、Groovy、Scala、Clojure、JRuby、Jython 等。实现这种语言无关性的基础仍然是虚拟机和字节码存储格式。Java 虚拟机不与包括 Java 在内的任何一种语言绑定,它只与 “Class文件” 这种特定的二进制文件格式相关联。

Java 语言中的各种变量,关键字和运算符的语义最终都是由多条字节码命令组合而成的,因此字节码命令所能提供的语义描述能力肯定会比 Java 语言本更加强大,所以,有一些 Java 语言本身无法有效支持的语言特性不代表字节码本身无法有效支持,这也为其它语言实现一些有别于 Java 的语言特性提供了基础。

Java虚拟机与平台无关性的更多相关文章

  1. Java虚拟机的平台无关性与语言无关性

    平台无关性 不同平台的不同java虚拟机,都执行同一种字节码文件,即Class文件 语言无关性 Java虚拟机不止能执行java程序,还有Clojure.Groovy.JRuby.Jython.Sca ...

  2. Java是如何实现平台无关性的

    相信对于很多Java开发来说,在刚刚接触Java语言的时候,就听说过Java是一门跨平台的语言,Java是平台无关性的,这也是Java语言可以迅速崛起并风光无限的一个重要原因.那么,到底什么是平台无关 ...

  3. 深入Java虚拟机读书笔记第二章平台无关性

    Java的体系结构对平台无关的支持 Java平台 Java的体系结构通过几种途径支持Java程序的平台无关性,其中主要是通过Java平台自己.Java平台扮演一个运行时Java程序与其下的硬件和操作系 ...

  4. 深入Java虚拟机(2)——Java的平台无关性

    一.平台无关性的好处 Java技术在网络环境下非常有用,其中一个关键理由是,用Java创建的可执行二进制程序,能够不加改变地运行于多个平台. 这样的平台无关性随之带来许多的好处.这将极大地减轻系统管理 ...

  5. Java的平台无关性

    转载自:http://www.cnblogs.com/Y/archive/2011/03/22/JavaVM_Learning_Chapter2_Platform_Independence.html ...

  6. Java 平台无关性的基石

    Java 在刚刚诞生之初就提出过一个非常著名的口号:"一次编写,到处运行", 这句话充分表达了软件开发人员对冲破平台界限的渴望 在竞争激烈的 IT 领域,各种不同的硬件体系结构和不 ...

  7. JVM(二),Java怎样实现一次编译到处运行(平台无关性)

    二.Java怎样实现一次编译到处运行(平台无关性) 1.java平台无关性原理 Java源码首先被编译成字节码,再由不同平台的JVM进行解析,JAVA语言在不同的平台上运行时不需要进行重新编译,Jav ...

  8. Java虚拟机平台无关性

    jruby Java 虚拟机面试题全面解析(干货) - Yano_nankai的博客 - CSDN博客 http://m.blog.csdn.net/Yano_nankai/article/detai ...

  9. Java的平台无关性如何体现出来的

    传统的编程中,源代码编译为可执行的代码后,只能针对特定的平台(操作系统),换句话说,针对Windows编写和编译的代码,只能在Windows上运行... java程序则编译为字节码.字节码本身不能运行 ...

随机推荐

  1. 批量Insert

    oracle INSERT ALL ,) ,) ,) FROM DUAL

  2. 深入理解Java自动装箱拆箱机制

    1.自动装箱与拆箱的定义 装箱就是自动将基本数据类型转换为包装器类型(int-->Integer): 拆箱就是自动将包装器类型转换为基本数据类型(Integer-->int). Java中 ...

  3. 进程?线程?多线程?同步?异步?守护线程?非守护线程(用户线程)?线程的几种状态?多线程中的方法join()?

    1.进程?线程?多线程? 进程就是正在运行的程序,他是线程的集合. 线程是正在独立运行的一条执行路径. 多线程是为了提高程序的执行效率.2.同步?异步? 同步: 单线程 异步: 多线程 3.守护线程? ...

  4. win10下 安装迅雷精简版

    下载链接:https://files-cdn.cnblogs.com/files/del88/ThunderMini_1.5.3.288.zip 他妈的 今天安装迅雷精简版 在win10上 竟然报错, ...

  5. hexo发布后样式丢失

    修改配置中url路径,和root,问题解决.

  6. 关于微信小程序中的样式使用变量值的方法

    在开发过程中,通常碰到样式非固定的情况,这时候就要使用变量来规定样式,例如,一个view的宽度需要使用变量: 1. 在wxss中,定义变量:width:var(--width--); 2. 在js中, ...

  7. Lab2 Report

    1.安装SeleniumIDE插件 a)安装Firefox 17.0 - 56.*版本的firefox,下载地址为:http://ftp.mozilla.org/pub/firefox/release ...

  8. 少勇 #import和@class的区别

    #import与@class的区别1.import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告 ...

  9. JavaMaven【八、pom.xml】

    简介: 重点学习: 1.dependency-scope 依赖范围 compile 编译 默认,对编译.测试.运行都有效 provided 编译和测试时有效 runtime 测试和运行时有效 test ...

  10. 四、DML语言

    目录 简介 主要操作 插入语句 语法 修改语句 修改单表 删除语句 DELETE TRUNCATE 两种删除总结 简介 DML语言就是数据操作语言 主要操作 插入:insert 修改:update 删 ...