理解java字节码
来源:互联网 发布:java page cache 编辑:程序博客网 时间:2024/05/24 05:53
详情(细节)
要理解字节码的细节,我们需要知道java虚拟机(jvm)是如何执行字节码的。jvm是基于栈的机器。每个线程
都有一个jvm栈来存储其结构。没当一个方法被调用就会创建一个frame,每个frame是由一个操作数栈,一个局部变
量数组和一个当前方法类的一个运行时常量池的引用组成的。
。接着位置1存放第一个形参,位置2存放第二个,以此类推。对于static方法,首先存放的是其第一个参数,位置
为0,以此类推。
局部变量数组的大小是在编译期由局部变量和方法参数的大小和数量决定的。栈采用的是LIFO(后进先出)原则
存取数据的。它的大小也是在编译期决定的。使用特定的指令(opcode)将值压入栈,另一些指令则用来获取栈数
据,并操作这些数据返回结果。栈也被用来接收方法的返回值。
public String employeeName()
{
return name;
}
Method java.lang.String employeeName()
0 aload_0
1 getfield #5 <Field java.lang.String name>
4 areturn
以上字节码由三条指令组成。第一条aload_0将局部变量push到栈中的局部变量数组的索引为0的位置。之前我
们已经知道,对于构造器方法和实例方法,其引用总是会被存放在局部变量数组中索引为0的位置上。第二条指令
getfield用来获取对象的字段。当执行这条指令时,栈顶的值被取出。#5时用来在类的运行时常量池中创建一个索
引,用来存放指向类的引用的名称。
要理解字节码的细节,我们需要知道java虚拟机(jvm)是如何执行字节码的。jvm是基于栈的机器。每个线程
都有一个jvm栈来存储其结构。没当一个方法被调用就会创建一个frame,每个frame是由一个操作数栈,一个局部变
量数组和一个当前方法类的一个运行时常量池的引用组成的。
局部变量数组又称局部变量表( local variable table),它包含了方法的参数,并用来存放局部变量的值。
。接着位置1存放第一个形参,位置2存放第二个,以此类推。对于static方法,首先存放的是其第一个参数,位置
为0,以此类推。
局部变量数组的大小是在编译期由局部变量和方法参数的大小和数量决定的。栈采用的是LIFO(后进先出)原则
存取数据的。它的大小也是在编译期决定的。使用特定的指令(opcode)将值压入栈,另一些指令则用来获取栈数
据,并操作这些数据返回结果。栈也被用来接收方法的返回值。
public String employeeName()
{
return name;
}
Method java.lang.String employeeName()
0 aload_0
1 getfield #5 <Field java.lang.String name>
4 areturn
以上字节码由三条指令组成。第一条aload_0将局部变量push到栈中的局部变量数组的索引为0的位置。之前我
们已经知道,对于构造器方法和实例方法,其引用总是会被存放在局部变量数组中索引为0的位置上。第二条指令
getfield用来获取对象的字段。当执行这条指令时,栈顶的值被取出。#5时用来在类的运行时常量池中创建一个索
引,用来存放指向类的引用的名称。
阅读全文
0 0
- 理解java字节码
- 字节码内容理解
- 字节码内容理解
- 深入理解java虚拟机(六)字节码指令简介
- 基于字节码指令理解Java中间缓存变量机制
- 通过反编译字节码来理解 Java 枚举
- 《深入理解java虚拟机》之字节码执行引擎
- [深入理解Java虚拟机]第六章 字节码指令简介
- 深入理解Java虚拟机 字节码执行引擎
- 深入理解Java虚拟机----(七)字节码执行引擎
- 深入理解Java虚拟机之虚拟机字节码执行引擎
- 通过反编译字节码来理解 Java 枚举
- 深入理解Java虚拟机6~虚拟机字节码执行引擎
- 《深入理解java虚拟机》-虚拟机字节码执行引擎
- 深入理解java虚拟机--->虚拟机字节码执行引擎
- 深入理解Java虚拟机:虚拟机字节码执行引擎
- 从字节码角度理解一些java 问题
- 深入理解Java虚拟机-8虚拟机字节码执行引擎
- PHP安装扩展原理+php7的redis扩展安装
- python与sudo python 引起的程序无法找到模块问题
- 蛋蛋的问题(一)
- tensorflow concat
- 面试题56. 链表中环的入口结点
- 理解java字节码
- LeetCode 455. Assign Cookies
- 总结一个recyclerview使用模版
- 《Python数据分析与挖掘实战》笔记(三):数据探索
- 【BZOJ1833】【数位DP】 count 数字计数
- 两数组的交 II
- MySQL命令show full processlist
- 线程的调度&&线程的生命周期&&Daemon线程
- memset与memcpy的用法