Java虚拟机札记-Class类文件结构

众所周知,Java是与平台无关的。字节码是Java虚拟机实现Java语言平台无关性的基石。Class文件是字节码文件。

平台无关性

程序的运行不会平台的变化而无法运行或出现运行错误,这样的特性就称为平台无关性。 程序需要在由OS和CPU所构成的平台上运行。每个平台都有自己独特的机器指令,所谓平台的机器指令就是可以被该平台直接识别、执行的一种由0和1组成的序列代码。相同的CPU和不同的OS所形成的平台的机器指令可能是不同的。

在虚拟机出现之前,我们将程序经过编译器编译成二进制本地机器指令,这样的机器指令可能只能在某些特定的平台上执行。一旦更换了平台,就可能需要修改源程序,并针对新的平台重新编译源程序。这就是平台有关性。而在充满竞争的IT领域,不可能只有一种平台,我们也不希望出现这种现象。

Sun公司和其他虚拟机提供商发布了许多可以运行在不同平台上的虚拟机,这些虚拟机都可以载入和执行与平台无关的字节码,从而实现了程序的“一次编写,到处运行”。随着虚拟机的出现与发展,越来越多的程序语言选择了与操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式。各种不同的虚拟机和不同平台都统一使用的程序存储格式——字节码是构成平台无关性的基石。

语言无关性

并不是只有Java语言编写的程序才能在Java虚拟机上运行。除了Java之外,已经发展出了Clojure、Groovy、JRuby、Jython、Scala等可以在Java虚拟机上运行的语言。虽然这些语言的使用者可能不是很多,但谁能保证Java虚拟机在语言无关性上的优势不会超过平台无关性呢?

字节码也是构成语言无关性的基石。Java虚拟机并不和语言绑定,只和字节码文件也就是Class文件关联。也就是说,Clojure语言的编译器将Clojure程序编译成的Class文件也能在虚拟机上运行。
MarkdownPhotos/master/CSDNBlogs/JVM/language-independence.jpg

Class文件结构

Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧密地排列在Class文件中,中间没有任何分隔符。当遇到8位字节以上空间的数据项时,则会按照高位在前的方式分隔成若干个8位字节进行存储。

未完待续。。。

本文摘录或总结自《深入理解Java虚拟机 JVM高级特性与最佳实践》。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值