1、Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件中,中间没有添加任何分隔符。
Class文件中只有两种数据类型:无符号数和表。无符号数可以描述数字、索引引用、数量值,或者按照UTF-8编码构成的字符串值;表是由多个无符号数或其他表作为数据项构成的复合数据类型。整个Class文件本质上就是一张表。
2、Class文件的构成
(1)魔数:0xCAFEBABE,位于Class文件的头4个字节。
(2)属性表:Slot是虚拟机为局部变量为分配内存所使用的最小单位。对于byte、char、float、int、short、
boolean、reference和returnAddress等长度不超过32位的数据类型,每个局部变量占用1个Slot恩赐 double和long则需要用2个slot来存放。
code_length是一个u4类型的长度值,理论上最大值为232-1个,但是虚拟机中规定了一个方法不允许65535条字节码指令,否则会拒绝编译(某些复杂的JSP文件可能会出现这个问题)。
(3)this对象。在任何实例方法中,都可以通过“this”关键字访问到此方法所属的对象。其实现原理即:javac编译器在编译的时候把对this关键字的访问转变为对一个普通方法参数的访问,然后在虚拟机调用实例方法时自动传入此参数即可。因此在实例方法的局部变量表中至少会存在一个指向当前对象实例的局部变量。但如果此方法是类方法(静态方法),则可能不存在局部变量(Args_size=0)。
(4)ConstantValue属性。虚拟机的变量赋值。
对非static类型的变量(也就是实例变量)的赋值是在实例构造器<init>方法中进行的;
对类变量,有两种赋值方式:A、赋值在类构造器<clinit>方法中进行,或者使用ConstantValue属性进行赋值。
对Sun Javac编译器来说,如果同时使用final和static来修饰一个变量(即常量),并且其数据类型是基本类型或String,就生成ConstantValue属性来进行初始化;如果该变量未被final修饰,或者并非基本类型及字符串,就选择在<clinit>方法中进行初始化。(P166)
3、Java虚拟机执行字节码是基于栈的体系结构。(P158)
相关推荐
《深入理解Java虚拟机》是Java开发者必读的经典之作,其中第三章主要探讨了Java安全方面的内容。在Java中,安全是一个至关重要的概念,因为Java的设计目标之一就是提供一种可以在不同环境中安全运行的代码机制。本章...
#### 第六章 Java Class文件 - **Java Class文件的结构**:本章详细介绍了Java Class文件的各个组成部分,包括魔数、版本号、常量池等。 - **魔数**:用于标识该文件是否为有效的Class文件。 - **版本号**:记录...
《JVM:深入理解Java虚拟机》是一本深入解析Java虚拟机工作原理和技术细节的经典书籍。这份学习笔记将涵盖JVM的关键概念、架构以及它如何影响Java程序的性能。我们将探讨以下几个方面: 1. **JVM概述** Java虚拟机...
Java虚拟机(JVM)是运行Java字节码的虚拟环境,它位于操作系统之上,硬件之下,提供了一层软件抽象,使得Java程序可以在多种平台上运行而无需重新编译。JVM的核心功能包括内存管理、垃圾收集、安全性和平台独立性。...
《深入理解Java虚拟机》是Java开发者们深入探讨Java运行机制的经典之作,作者周志明以其深入浅出的讲解方式,揭示了Java虚拟机(JVM)的工作原理。本资源包含该书第三版的源码分析及学习笔记,旨在帮助读者更透彻地...
3. **运行程序**:通过Java虚拟机(`java.exe`)执行编译后的`.class`文件。 #### 注释 - **单行注释**:使用`//`标记。 - **多行注释**:使用`/* */`包裹注释内容。 #### Java编程方向 - **Java SE (J2SE)**:...
- 字节码文件由Java虚拟机(JVM)解释执行,并最终转化为机器指令。 - JVM能够确保Java程序在各种平台上运行,实现了跨平台性。 #### 三、JRE与JDK 1. **JRE (Java Runtime Environment)**: - JRE包含了Java...
- **垃圾回收**: 由Java虚拟机(JVM)中的一个后台线程GC负责。 - 当虚拟机检测到内存不足时,会触发垃圾回收过程。 - 用户可以通过调用`java.lang.System.gc()`来建议进行垃圾回收,但系统可能会忽略这个请求,根据...
它的设计目标是“一次编写,到处运行”(Write Once, Run Anywhere, WORA),通过Java虚拟机(JVM)实现了这一目标,可以在不同操作系统上运行Java程序。 2. **与.NET框架的区别**: - 平台独立性:Java代码编译成...
作为笔记的作者,被称为“专业第一”,意味着笔记内容会覆盖Java的基础语法、面向对象的深入理解和高级特性。 2. 面向对象编程:在Java中,一切皆为对象,这是Java最重要的编程范式之一。面向对象编程的基本概念...
- **JRE(Java Runtime Environment)**:包含了运行Java程序所需的Java虚拟机、核心类库和支持文件。 - **JDK(Java Development Kit)**:包含了JRE,同时还包含了编译工具、调试工具和其他开发工具。 4. **...
这个压缩包包含了从第1章到第6章的Java编程笔记的源代码,旨在帮助读者深入理解Java语言的基本概念、语法和常用技术。在本文中,我们将详细探讨这些章节可能涵盖的关键知识点。 1. **Java简介** - Java的历史和...
本篇Java学习笔记旨在为读者提供一个深入理解Java的基础与进阶知识的框架,帮助初学者及有一定经验的开发者提升Java编程技能。 ### 一、Java入门与基本语法 #### 课程概述 Java课程旨在介绍面向对象编程的基本原则...
这得益于Java虚拟机(JVM),它使得Java程序可以在任何支持JVM的平台上运行。 2. **环境配置**:学习Java的第一步是安装Java Development Kit (JDK)并配置环境变量,包括JAVA_HOME、PATH和CLASSPATH。 3. **基础...
此外,可能还会涉及到JVM(Java虚拟机)的工作原理、垃圾回收机制以及如何进行性能优化等相关知识。 【压缩包子文件的文件名称列表】只有一个文件名为"良葛格Java学习笔记html",这通常意味着压缩包内包含一个完整...
#### 第六章:时间、日期和数字 - **6.1 Date类** 提供了表示日期和时间的功能。 - **6.2 Calendar类** 更高级的时间和日期处理类。 - **6.3 Math类** 提供了常用的数学函数和常量。 #### 第七章:AWT工具...
2. **环境配置**:学习Java的第一步是安装Java Development Kit (JDK)并配置环境变量,包括设置JAVA_HOME、PATH和CLASSPATH等,确保能够运行Java编译器javac和Java虚拟机java。 3. **基础语法**:笔记会详细讲解...
9. **Java虚拟机(JVM)**: JVM是Java程序的执行环境,理解它的内存模型(堆、栈、方法区等)、垃圾回收机制以及性能优化策略,对提升程序性能和解决问题很有帮助。 10. **Java标准库**: 标准库提供了大量预定义的...
### 第六章:常用类API - **字符串处理**:`String`类和`StringBuilder`类。 - **日期时间操作**:`Date`类、`Calendar`类以及`java.time`包中的类。 ### 第七章:集合框架(容器) - **集合接口**:`Collection`、...
它的设计目标是“一次编写,到处运行”,通过Java虚拟机(JVM)实现跨平台的能力。 2. **Java环境配置**:学习Java的第一步是安装Java Development Kit (JDK)并配置环境变量,包括JAVA_HOME、PATH和CLASSPATH,以便...