概述

代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。
——《深入理解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 的语言特性提供了基础。

最新文章

  1. xtrabackup 使用说明(续)
  2. AD10的PCB设计规则
  3. opensuse sublime 配置
  4. check_pkg函数解析
  5. shell脚本二
  6. buffer和cache有什么本质区别
  7. ps怎么把白色背景变透明
  8. jquery插件参数传递
  9. 腾讯内部举报信曝光: HR内斗混乱 玩弄求职者
  10. 转:实体ToolTip显示XData
  11. soap协议
  12. 常用CSS代码片断
  13. HDU4453--Looploop (Splay伸展树)
  14. Eclipse用法和技巧十九:eclipse修改workspace
  15. 概述java语言
  16. mysql导出数据表结构,必须退出mysql命令.重新使用msyqldump命令
  17. 白瑜庆:知乎基于Kubernetes的kafka平台的设计和实现
  18. 冒泡排序(JAVA实现)
  19. Docker集中化web界面管理平台-Shipyard部署记录
  20. poj 1026

热门文章

  1. 【php设计模式】建造者模式
  2. @media screen媒体查询实现页面自适应布局
  3. XWork配置示例
  4. 查看PHP指定扩展的版本信息
  5. JPA自带findOne方法报错原因
  6. STM32TIM定时器的影子寄存器
  7. Django项目实战—用户头像上传
  8. idou老师教你学Istio05: 如何用Isito实现智能路由配置
  9. 如何定义搜索面板的过滤器?DevExpress WPF超easy
  10. git命令行提交流程