一. java虚拟机的整体结构.
1。java数据类型:
primite type 原型数据:int,boolean,float等。原型数据在内存中的存放方式就是直接占用内存,不同于对象的存储是存储对象引用指向heap中的对象。
returnAddress 数据类型 :是指向java的指令集的指针。
Reference Types and Values 分为对象,数组,接口三种引用,分别指向对应的heap中某块。
2。运行时java中内存数据区域:
pc register 类似于计算机的指令寄存器,存储下一条要执行的代码的内存地址,以便cpu执行,不过jvm的pc register是每个线程独享的
native 方法栈:用来执行java里的native方法的栈。每个线程独享,存放C指令,用来执行C代码。
栈:每个线程独享,创建线程时分配,也是具体代码执行地“中转空间”。
frame是每次调用方法是分配的,frame里包括localvariables数组和operatestack 。jvm的指令执行方式类似于后缀表达式的执行方式,执行指令前把
指令需要的数据准备到operatestack 中,再取出数据执行,零食需要保存的数据就保存到localvariables。比实际的计算机执行方法简单。
堆:堆空间是jvm里所有线程共享的,记录的是和对象有关的信息。例如:field,method,runtime constant pool。
本地内存, jvm支持本地内存的使用,direct memory不在jvm的堆栈等空间中,是直接使用的计算机内存。
二。jvm 指令的执行方式
jvm的每个线程独立使用stack,所以不会有stack层级的数据冲突(但共享的heap里的数据可能会冲突),程序的最终执行是函数内的指令执行和调用其他函数,
所以执行单条指令,执行函数,函数的返回值返回到operatestack里
三。class文件格式
一些版本信息,类似于很多文件格式
filed,method,interface,class,superclass
attribute:设计好的数据类型,记录field,method,interface等其他属性信息
constant pool :数组类型,记录数据给field,method,attribute等,并通过下标的方式找到数据。
四。jvm的指令系统。
jvm的指令系统祥见oracle的文档,里面的说明和详细,指令系统的特点是,每种数据类型(int,float)使用不同的指令。
指令包括数据从localvariables 和 operatestack 的互相移动,外部数据(磁盘,网络)的输入,数学运算,指令执行的跳转,函数调用。对象,数组新建。抛异常等。
五。 jvm的gc。