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博客
      相关文章
      |
      1月前
      |
      存储 Java 数据安全/隐私保护
      【JVM】Java虚拟机栈(Java Virtual Machine Stacks)
      【JVM】Java虚拟机栈(Java Virtual Machine Stacks)
      36 0
      |
      27天前
      |
      缓存 Java C#
      【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
      【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
      77 0
      |
      8天前
      |
      缓存 监控 Java
      深入理解Java虚拟机(JVM)性能调优
      【4月更文挑战第18天】本文探讨了Java虚拟机(JVM)的性能调优,包括使用`jstat`、`jmap`等工具监控CPU、内存和GC活动,选择适合的垃圾回收器(如Serial、Parallel、CMS、G1),调整堆大小和新生代/老年代比例,以及代码优化和JIT编译策略。通过这些方法,开发者能有效提升应用性能并应对复杂性挑战。性能调优是持续过程,需伴随应用演进和环境变化进行监控与优化。
      |
      10天前
      |
      存储 XML 监控
      JVM工作原理与实战(三):字节码文件的组成
      JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了字节码文件的基础信息、常量池、方法、字段、属性等内容。
      26 6
      |
      24天前
      【嵌入式】虚拟机未能将管道连接到虚拟机: 系统找不到指定的文件
      【嵌入式】虚拟机未能将管道连接到虚拟机: 系统找不到指定的文件
      |
      1月前
      |
      存储 Java 编译器
      JVM虚拟机内存区域详情
      JVM虚拟机内存区域详情
      15 0
      |
      1月前
      |
      存储 安全 前端开发
      什么是Java虚拟机(JVM),它的作用是什么?
      什么是Java虚拟机(JVM),它的作用是什么?
      |
      1月前
      |
      存储 Java 开发者
      深入理解Java虚拟机(JVM)内存管理
      【2月更文挑战第11天】 在本篇文章中,我们将深入探讨Java虚拟机(JVM)的内存管理机制,一项对于优化Java应用性能至关重要的技术领域。不同于常规的技术文章摘要,我们不仅概述了JVM内存管理的基本概念,还将引导读者通过实际案例理解其在现实世界应用中的重要性。从堆(Heap)和栈(Stack)的区别开始,到垃圾收集(Garbage Collection)机制的工作原理,本文旨在为Java开发者提供一个清晰、系统的JVM内存管理知识框架,帮助他们在开发过程中做出更加明智的决策。
      |
      2月前
      |
      存储 Linux KVM
      |
      2月前
      |
      存储 Java 编译器
      深入理解JVM - 类文件结构
      深入理解JVM - 类文件结构
      58 1