Java虚拟机的运行时数据区-go语言实现
创始人
2024-05-29 02:02:06
0

Java虚拟机的运行时数据区

Java虚拟机把存放各式各样数据的内存区域叫作运行时数据区。运行时数据区分成两类:

一类时多线程共享的,一类时线程私有的。多线程共享的数据在Java虚拟机启动时创建好,在Java虚拟机退出时销毁。线程私有的运行时数据区在创建线程时创建,在线程退出时销毁。

运行时数据区

多线程共享的区域包括类和实例对象,实例对象保存在堆中,类保存在方法区中,其中类数据包含了类的方法、字段、方法字节码还有常量池信息。

线程私有的区域包括了PC(程序计数器)和java虚拟机栈,Java虚拟机栈又由栈帧构成,帧保存了局部变量和操作数栈信息。任意时刻,某个线程肯定是执行某一个方法,这个方法叫作该线程的当前方法;执行该方法的帧叫作当前帧。

java虚拟机支持操作的数据类型

java虚拟机支持的可操作数类型

如上图所示,java虚拟机可支持的数据类型包括了两类,一类是基本类型,一类是引用类型

基本类型包含了布尔类型和数字类型,数字类型包括了整数类型和浮点数类型。

引用类型包括了类类型、接口类型、数组类型。其中类类型引用指向类实例,数组类型引用指向数组实例,接口类型引用指向实现了该接口的类或者数组实例。

go语言提供了非常丰富的数据类型,这些基本类型,和Java虚拟机的数据类型之间建立了一定的映射关系。

java虚拟机数据类型与go语言数据类型映射表

实现运行时数据区

按照前面的描述,定义Thread结构体:

type Thread struct {pc int //程序计数器stack *Stack //Java虚拟机栈
}

Java虚拟机规范对于Java虚拟机栈的约束相当宽松。虚拟机栈可以时连续的空间,也可以时不连续的,可以时固定大小,也可以时在运行时动态扩展。

如果执行线程需要的栈空间超出了限制,则会导致StackOverflowError异常抛出。如果Java虚拟机可以动态扩展,但是内存已经耗尽,会导致OutOfMemoryError异常抛出。

对于Java虚拟机栈,我们常用链表数据结构来实现,这样栈就可以按需使用内存空间,而且弹出来的帧可以被Go的垃圾收集器回收。定义Stack结构体如下所示:

type Stack struct {maxSize uint //栈的最大大小size uint //当前大小_top *Frame //保存栈顶指针
}

定义虚拟机中的帧如下所示的结构体:

type Frame struct {lower *Frame //用于实现链式栈localVars LocalVars //局部变量表operandStack *OperandStack  //操作数栈
}

定义局部变量表如下所示:

type LocalVars []Slot
type Slot struct {num int32 //用来保存基本数据类型ref *Object //用来保存引用类型
}
type Object struct {
}

定义操作数栈OperandStack如下所示:

type OperandStack struct {size uint //记录栈顶的位置slots []Slot //
}

具体实现见github

相关内容

热门资讯

安卓系统的总体框架,架构与核心... 你有没有想过,你的手机里那个神奇的安卓系统,它到底是怎么运作的呢?今天,就让我带你一探究竟,揭开安卓...
谁的安卓系统好,谁家的安卓系统... 说到安卓系统,这可是个热门话题呢!你有没有想过,这么多安卓手机品牌,哪个的操作系统最让你心动?今天,...
安卓系统信付通,安全无忧的移动... 你知道吗?在安卓手机的世界里,有一个超级好用的支付工具,它就是信付通。今天,就让我带你来全方位了解一...
小米官方系统安卓包,深度解析与... 亲爱的数码爱好者们,你是否曾为手机系统而烦恼?市面上那么多手机品牌,各种操作系统让人眼花缭乱。今天,...
自制安卓手机双系统,自制安卓手... 你有没有想过,自己的手机可以同时运行两个操作系统呢?没错,就是那种安卓手机双系统!听起来是不是很酷?...
小米安卓系统怎么设置,科技前沿... 小米手机的用户们,是不是觉得安卓系统有点复杂,设置起来有点头疼呢?别担心,今天就来手把手教你如何轻松...
点歌系统支持安卓系统么,安卓用... 你有没有想过,在手机上点歌听歌,是不是也能像在KTV里那样随心所欲呢?现在,就让我来告诉你一个超级酷...
原版安卓系统刷机,解锁无限可能 你有没有想过,你的安卓手机其实可以焕然一新?没错,就是那种原汁原味的安卓系统,让你的手机重新找回当初...
欧尚改装安卓系统,打造智能驾驶... 你有没有想过,你的欧尚汽车其实也可以变身成为智能座驾呢?没错,就是那个你每天上下班的伙伴——欧尚,现...
安卓系统最新事件,揭秘最新重大... 你知道吗?最近安卓系统可是发生了一件超级大事件,简直让人兴奋得心跳加速!这不,我就迫不及待地来和你分...
早期电话手表安卓系统,安卓系统... 你有没有想过,小时候那些看似简单的玩具,现在竟然也能玩出花来?比如,早期的电话手表,那时候的功能可真...
安卓老系统手机游戏,安卓老系统... 你有没有发现,那些安卓老系统手机,虽然看起来有点古老,但它们在游戏界可是有着自己独特的魅力呢!想象那...
安卓系统重启还是开关,重启与开... 手机突然卡壳了,是不是又该给安卓系统来个重启大法了?别急,今天就来聊聊这个让人又爱又恨的“安卓系统重...
安卓系统刷入iso,轻松实现个... 你有没有想过,你的安卓手机其实可以像变形金刚一样,换上全新的“皮肤”?没错,就是刷入ISO系统!这可...
安卓机系统无法关机,探究原因与... 最近我的安卓手机怎么啦?总是关机不成功,真是让人头疼啊!这可怎么办呢?别急,让我来帮你分析找出解决这...
安卓什么系统广告最多,揭秘最新... 你有没有发现,每次打开安卓手机,广告就像无处不在的小精灵,跳来跳去,让人眼花缭乱?今天,就让我带你一...
禁止中国使用安卓系统,“安卓系... 你知道吗?最近互联网上掀起了一股热议,那就是关于中国是否应该禁止使用安卓系统的话题。这可不是闹着玩的...
如何分辨ios系统和安卓系统,... 你有没有想过,你的手机里装的是iOS系统还是安卓系统呢?这两种系统各有千秋,但分辨它们其实并不难。今...
如何查询安卓系统版本,安卓系统... 你有没有想过,你的安卓手机里隐藏着一个小秘密——那就是它的系统版本!知道这个秘密,不仅能让你更好地了...
lg电视系统和安卓系统比较,性... 你有没有发现,现在家里的电视已经不再是那个傻乎乎的“大盒子”了?它变得聪明起来,能和你互动,能上网,...