本章我们来重点分析下局部变量表和操作数栈,并测试本章代码。
局部变量表和操作数栈实例详解
下面以圆形的周长为例进行分析,首先简单的Java代码如下:
本章我们来重点分析下局部变量表和操作数栈,并测试本章代码。
下面以圆形的周长为例进行分析,首先简单的Java代码如下:
到目前为止,已经实现了搜索、解析class文件,本章节就来讨论下如何初步实现运行时数据区。
在运行Java程序时,Java虚拟机需要使用内存在存放各式各样的数据。Java虚拟机规范把这些内存区域叫作运行时数据区。运行时数据区可以分成两类:一类是多线程共享的,另一类则是线程私有的。多线程共享的运行时数据去需要在Java虚拟机启动时创建浩,在Java虚拟机退出时销毁。线程私有的运行时数据区则是在线程创建时才创建,线程退出时销毁。
线程私有的运行时数据区用于辅助执行Java字节码。每个线程有自己的pc寄存器和Java虚拟机栈。Java虚拟机栈又由栈帧构成,栈帧中保存方法执行的状态,包括局部变量表和操作数栈等。本章节将开始学习如何初步实现线程私有的运行时数据区。
Redis还特别适用于解决基于搜索的问题,这类问题通常需要使用集合以及有序集合的交集、并集、和差集操作查找符合指定要求的元素。本章就来学习下,如何使用Redis进行搜索。假设一个对文档搜索的场景,如何使用Redis更快地进行搜索。基于搜索的应用程序相关代码位于项目的search模块中。
本章节开始学习属性表相关信息,上一节找到的main()方法的字节码就出现在属性表中,属性表可谓是个大杂烩,里面存储了各式各样的信息。下面我们就来详细讨论讨论。
和常量池类似,各种属性表达的信息也各不相同,因此无法用同一的结构来定义。不同之处在于,常量是由Java虚拟机规范严格定义的,共有14种。但是属性是可以扩展的,不同的虚拟机实现可以定义自己的属性类型,所以Java虚拟机规范没有使用tag,而是使用属性名来区别不同的属性。属性的结构定义如下: