Java 虚拟机原理】Class 字节码二进制文件分析 七 ( 局部变量表分析 )(二)

简介: Java 虚拟机原理】Class 字节码二进制文件分析 七 ( 局部变量表分析 )(二)

二、局部变量表


在 Student 的 setName 方法中 , 定义了 3 33 个局部变量 , 将 setName 方法的对应字节码的附加信息提取出来单独分析 , 该方法对应的字节码数据中 , 肯定有局部变量表 ;


public void setName(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: ACC_PUBLIC
    Code:
      stack=2, locals=5, args_size=2
         0: aload_0
         1: aload_1
         2: putfield      #2                  // Field name:Ljava/lang/String;
         5: iconst_0
         6: istore_2
         7: iconst_1
         8: istore_3
         9: iconst_2
        10: istore        4
        12: return
      LineNumberTable:
        line 9: 0
        line 10: 5
        line 11: 7
        line 12: 9
        line 13: 12
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      13     0  this   LStudent;
            0      13     1  name   Ljava/lang/String;
            7       6     2     i   I
            9       4     3     j   I
           12       1     4     k   I



方法的最后有一个局部变量表 : 该局部变量表就是 " 线程栈 " 中维护的 " 栈帧 " 的 " 局部变量表 " ;


局部变量表 在 编译时 , 就已经在字节码文件中 生成好了 , 在 类加载器 将字节码文件加载到内存中时 , 直接将 字节码中的数据加载到


 

LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      13     0  this   LStudent;
            0      13     1  name   Ljava/lang/String;
            7       6     2     i   I
            9       4     3     j   I
           12       1     4     k   I


局部变量表的第一行肯定是 局部变量 所在类 ;


局部变量表从 1 11 开始计数 , 并不是没有第 0 00 个元素 , 第 0 00 个元素是当前类 this , 这是所有的局部变量表固定的格式 ;



回顾 【Java 虚拟机原理】垃圾回收算法 ( Java 虚拟机内存分区 | 垃圾回收机制 | 引用计数器算法 | 引用计数循环引用弊端 ) 一、Java 虚拟机内存分区 章节内容 ;


整个 JVM 内存区域分为 方法区 , 堆区 , 线程栈 , 本地方法栈 , 程序计数器 ;


其中 线程栈 中维护 栈帧 , 每个栈帧 中维护 局部变量表 , 操作数栈 , 动态链接 , 方法出口 ; 这里的 局部变量表 就是本博客介绍的 字节码文件 的局部变量表 ;

image.png


目录
相关文章
|
2月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
94 9
|
2月前
|
Ubuntu 网络安全 虚拟化
VMware虚拟机ping不通原因排查及分析
下面以 VMware 虚拟机为例进行介绍。
1402 3
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
106 2
|
17天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
83 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
1月前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
101 34
|
2月前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
51 3
|
2月前
|
Java 测试技术 Maven
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。
|
2月前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
204 2
|
2月前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
466 1
|
22天前
|
存储 Java 程序员
【JVM】——JVM运行机制、类加载机制、内存划分
JVM运行机制,堆栈,程序计数器,元数据区,JVM加载机制,双亲委派模型

热门文章

最新文章