bboyjing's blog


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 公益404
bboyjing's blog

自己动手写JVM十二【运行时数据区(二)】

发表于 2017-01-23 | 分类于 JVM

本章我们来重点分析下局部变量表和操作数栈,并测试本章代码。

局部变量表和操作数栈实例详解

下面以圆形的周长为例进行分析,首先简单的Java代码如下:

1
2
3
4
5
6
7
8
9
10
11
public class Math {
public static void main(String[] args) {
System.out.println(circumference(1.6f));
}
public static float circumference(float r) {
float pi = 3.14f;
float c = 2 * pi * r;
return c;
}
}

阅读全文 »
bboyjing's blog

自己动手写JVM十一【运行时数据区(一)】

发表于 2017-01-22 | 分类于 JVM

到目前为止,已经实现了搜索、解析class文件,本章节就来讨论下如何初步实现运行时数据区。

运行时数据区概述

在运行Java程序时,Java虚拟机需要使用内存在存放各式各样的数据。Java虚拟机规范把这些内存区域叫作运行时数据区。运行时数据区可以分成两类:一类是多线程共享的,另一类则是线程私有的。多线程共享的运行时数据去需要在Java虚拟机启动时创建浩,在Java虚拟机退出时销毁。线程私有的运行时数据区则是在线程创建时才创建,线程退出时销毁。
线程私有的运行时数据区用于辅助执行Java字节码。每个线程有自己的pc寄存器和Java虚拟机栈。Java虚拟机栈又由栈帧构成,栈帧中保存方法执行的状态,包括局部变量表和操作数栈等。本章节将开始学习如何初步实现线程私有的运行时数据区。

阅读全文 »
bboyjing's blog

Redis学习笔记十七【基于搜索的应用程序-使用Redis进行搜索】

发表于 2017-01-16 | 分类于 Redis

Redis还特别适用于解决基于搜索的问题,这类问题通常需要使用集合以及有序集合的交集、并集、和差集操作查找符合指定要求的元素。本章就来学习下,如何使用Redis进行搜索。假设一个对文档搜索的场景,如何使用Redis更快地进行搜索。基于搜索的应用程序相关代码位于项目的search模块中。

阅读全文 »
bboyjing's blog

自己动手写JVM十【解析class文件(八)】

发表于 2017-01-16 | 分类于 JVM

本章节继续学习属性相关信息

解析属性表

Code属性

Code时变长属性,只存在于method_info结构中。Code属性中存放字节码等方法相关信息,其结构定义如下:

阅读全文 »
bboyjing's blog

自己动手写JVM九【解析class文件(七)】

发表于 2017-01-12 | 分类于 JVM

本章节开始学习属性表相关信息,上一节找到的main()方法的字节码就出现在属性表中,属性表可谓是个大杂烩,里面存储了各式各样的信息。下面我们就来详细讨论讨论。

解析属性表

AttributeInfo接口

和常量池类似,各种属性表达的信息也各不相同,因此无法用同一的结构来定义。不同之处在于,常量是由Java虚拟机规范严格定义的,共有14种。但是属性是可以扩展的,不同的虚拟机实现可以定义自己的属性类型,所以Java虚拟机规范没有使用tag,而是使用属性名来区别不同的属性。属性的结构定义如下:

阅读全文 »
1…181920…30
bboyjing

bboyjing

147 日志
17 分类
20 标签
友情链接
  • bailaohe
© 2021 bboyjing
由 Hexo 强力驱动
主题 - NexT.Mist