
B站河北王校长-JVM深度核心面试知识点汇总.pdf
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
这份PDF文档由B站知名UP主“河北王校长”整理发布,全面总结了JVM(Java虚拟机)相关的核心面试知识点,适合有意向从事或进一步发展于Java开发领域的技术人士深入学习和准备面试时参考。
### 相关知识点详解
#### 1. **Class文件结构**
- **定义**:Class文件是一种以8字节为单位的二进制流文件,它按照严格的数据结构组织存储,主要用于存储Java类的信息。
- **数据组织**:Class文件中的数据紧密排列,中间不包含任何分隔符。这种组织方式使得Class文件中的数据几乎都是运行时必要的信息。
- **数据类型**:根据《Java虚拟机规范》,Class文件采用了一种类似于C语言结构体的形式来存储数据,其中只包含两种数据类型:“无符号数”和“表”。
- **无符号数**:用于表示数字、索引、数量值或UTF-8编码的字符串。无符号数分为u1、u2、u4、u8四种类型,分别表示1个字节、2个字节、4个字节和8个字节的数据。
- **表**:由多个无符号数或其他表组成,通常以“_info”结尾,用于描述复合数据结构。
#### 2. **Class文件的魔数和版本号**
- **魔数**:每个Class文件的前四个字节称为魔数(Magic Number),用于确认文件是否为有效的Class文件。
- **版本号**:
- **次版本号**(Minor Version):位于魔数后的第5和第6个字节。
- **主版本号**(Major Version):位于魔数后的第7和第8个字节。
- **意义**:这些版本号可以帮助虚拟机确定Class文件是否与当前环境兼容。
#### 3. **常量池计数器从1开始的原因**
- **原因**:常量池的容量计数值(constant_pool_count)是从1开始计数的,这意味着索引值范围从1到N。
- **目的**:这样做是为了方便处理一些特殊的情况,比如索引值为0可以表示“不引用任何常量池项目”。
- **示例**:例如,匿名内部类的名称索引可以设为0表示没有类名称。
#### 4. **Class文件常量池内容**
- **存储内容**:常量池中主要存储两类内容:
- **字面量**:如文本字符串、被声明为final的常量值等。
- **符号引用**:主要包括:
- 被模块导出或开放的包(Package);
- 类和接口的全限定名;
- 字段的名称和描述符;
- 方法的名称和描述符;
- 动态调用点和动态常量。
#### 5. **Java字段名和方法名长度限制**
- **限制**:方法名称和字段名称存储于常量池中的CONSTANT_Utf8_info类型中。
- **结构**:CONSTANT_Utf8_info类型的结构决定了方法名和字段名的最大长度。
- **最大长度**:最大长度由u2类型所能表示的最大值决定,即65535。这意味着方法名或字段名的最大长度为64KB。
- **编译限制**:如果定义了超过64KB的变量或方法名,则会导致编译失败。
#### 6. **Class文件结构中的访问标志**
- **位置**:访问标志位于常量池结束后的2个字节内。
- **功能**:用于识别类或接口的访问信息,包括但不限于公共访问、最终类、抽象类等属性。
Class文件结构不仅包含了运行时必要的数据信息,并通过严谨的数据组织形式确保了数据的有效性和高效利用。对于深入理解Java虚拟机(JVM)以及相关的面试准备而言,这些知识点是非常重要的。
全部评论 (0)


