JVM虚拟机-Class文件简介

简介: JVM虚拟机-Class文件简介

 一、简介

class文件全名称为Java class文件,class文件径打破了C或者C++等语言所遵循的传统,当编译和连接一个C++程序时,所获得的可执行二进制文件只能在指定的硬件平台和操作系统上运行,因为这个二进制文件包含了对目标处理器的机器语言

而Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),也就是在计算机上再虚拟一个计算机,它存在于计算机内存中并运行在操作系统之上的,然后再把Java class加载到JVM里运行。

因此Java class文件是可以运行在任何支持Java虚拟机的硬件平台和操作系统上的二进制文件,实现了“一次编写、处处运行”。

二、定义

Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符。根据Java虚拟机规范的规定,Class文件结构采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构只有两种数据类型:无符号数

    • 无符号数属于基本的数据类型,以u1、u2、u4、u8来表示1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值或者按照UTF-8编码构成的字符串值。
    • 表是由多个无符号数或者其他表作为数据项构成的符合数据类型,所有表都习惯性地以“_info”结尾。表用于描述有层次关系的复合结构的数据,整个class文件就是一张表 ,它由下表所示的数据项构成。

    image.gif编辑

    无论是无符号数还是表,当需要描述同一类型但数量不定的多个数据时,经常会使用一个前置的容量计数器加若干个连续的数据项的形式,这时候称这一系列连续的某一类型的数据为某一类型的“集合”。

    需要强调的是,Class的结构不像xml等描述语言,由于它没有任何分隔符号,所以上表中的数据项,无论是顺序还是数量,甚至于数据存储的字节序(Byte Ordering,Class 文件中字节序为Big-Endian)这样的细节,都是被严格限定的,哪个字节代表什么含义,长度是多少, 先后顺序如何,全部都不允许改变。

    三、Class文件发展历史

    Java技术能够一直保持着非常良好的向后兼容性,Class文件结构的稳定功不可没,任何一门程序 语言能够获得商业上的成功,都不可能去做升级版本后,旧版本编译的产品就不再能够运行这种事情。而Class文件的结构,绝大部分都是在第一版的《Java虚拟机规范》(1997年 发布,对应于JDK 1.2时代的Java虚拟机)中就已经定义好的,内容虽然古老,但时至今日,Java发展经历了十余个大版本、无数小更新,那时定义的Class文件格式的各项细节几乎没有出现任何改变。尽 管不同版本的《Java虚拟机规范》对Class文件格式进行了几次更新,但基本上只是在原有结构基础上 新增内容、扩充功能,并未对已定义的内容做出修改。

    四、Java虚拟机实现语言的无关性

    image.gif编辑

    参考资料:

      1. Class文件详解_IT_GJW的博客-CSDN博客_class文件是什么
      2. 深入理解Java虚拟机(第三版)-- Class类文件结构_吴声子夜歌的博客-CSDN博客
      相关文章
      |
      4天前
      |
      安全 Java
      对 JVM 的类加载机制以及寻找字节码文件的“双亲委派模型”的理解
      对 JVM 的类加载机制以及寻找字节码文件的“双亲委派模型”的理解
      10 0
      |
      4天前
      |
      存储 Java
      深入理解Java虚拟机:JVM内存模型
      【4月更文挑战第30天】本文将详细解析Java虚拟机(JVM)的内存模型,包括堆、栈、方法区等部分,并探讨它们在Java程序运行过程中的作用。通过对JVM内存模型的深入理解,可以帮助我们更好地编写高效的Java代码,避免内存溢出等问题。
      |
      2天前
      |
      Java 虚拟化 Docker
      Docker简介及用途,为什么要使用Docker?Docker容器和虚拟机的区别
      Docker简介及用途,为什么要使用Docker?Docker容器和虚拟机的区别
      |
      4天前
      |
      运维 监控 数据可视化
      【JVM】JVM 虚拟机重点解析(下)
      【JVM】JVM 虚拟机重点解析
      16 0
      |
      4天前
      |
      存储 算法 Java
      【JVM】JVM 虚拟机重点解析(上)
      【JVM】JVM 虚拟机重点解析
      17 0
      |
      4天前
      |
      存储 前端开发 Java
      深入浅出JVM(四)之类文件结构
      深入浅出JVM(四)之类文件结构
      深入浅出JVM(四)之类文件结构
      |
      4天前
      |
      存储 缓存 安全
      深入浅出JVM(三)之HotSpot虚拟机类加载机制
      深入浅出JVM(三)之HotSpot虚拟机类加载机制
      |
      4天前
      |
      存储 缓存 算法
      深入浅出JVM(一)之Hotspot虚拟机中的对象
      深入浅出JVM(一)之Hotspot虚拟机中的对象
      |
      4天前
      |
      Oracle Java Serverless
      JVM工作原理与实战(三十六):GraalVM虚拟机
      JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了GraalVM、GraalVM的两种运行模式、GraalVM应用场景、参数优化和故障诊断等内容。
      17 1
      |
      4天前
      |
      存储 监控 安全
      JVM工作原理与实战(十六):运行时数据区-Java虚拟机栈
      JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了运行时数据区、Java虚拟机栈等内容。
      12 0

      热门文章

      最新文章