寄存器和java栈java栈由许多栈帧组成。一个栈帧包含一个java方法的调用的状态。当线程调用一个方法的时候,虚拟机压入一个新的栈桢到该线程的java栈中。当方法返回时,这个栈桢被从java栈中弹出并抛弃。引用有3中,类类型,接口类型,数组类型。JVM中,最基本的数据单元是字。至少选择32位作为字长。JVM有两种类装载器:启动类装载器(JVM实现的一部分每个JVM都必须有一个)用户自定义的类装载器(JAVA程序的一部分,必须继承javala
gCloassLoader)。由不同的类装载器装载的类被放在虚拟机内部的不同的命名空间中。方法区:大小不固定,根据需要动态调整方法区可以被垃圾回收包含
提取装载的类的信息,放到方法区JVM总能通过存储于方法区的内存信息来确定一个对象需要多少内存
类的静态变量也放到方法区。虚拟机为装载的每个类存储如下信息:
这个类型的全限定名
f这个类型的直接超类的全限定名这个类型是类类型还是接口类型这个类的访问权限修饰符任何直接超接口的全限定名的有序列表该类型的常量池
该类型所用常量的一个有序集合,包括直接常量(Stri
gI
tegerfloati
gpoi
t),和对其他类型,字段,方法的符号引用
字段信息字段名字段类型字段的修饰符声明的顺序
方法信息方法名方法的返回值类型方法的参数和类型,顺序方法的修饰符方法的操作码操作数栈和该方法的栈帧中局部变量区的大小异常表
除了常量以外的所有类(静态)变量一个到类CloassLoader的引用一个到Class类的引用方法表
虚拟机为每一个装载的非抽象类都生成一个方法表堆
一个java程序独占一个JVM,一个JVM中只存在一个堆。所以,每个java
程序有它自己的堆,但同一个java程序的多个线程共享一个堆运行时创建的所有类实例数组对象垃圾回收器回收内存移动对象以减少碎片不必是连续的内存,可以动态的扩展和收缩一个JVM的实现的方法区可以在堆顶实现栈帧栈帧由3部分组成:局部变量区,操作数栈,帧数据区。局部变量区,操作数栈的大小在编译的时候就确定了。局部变量区
以字长为单位,从0开始计数的数组。i
t,float,refere
ce,retur
address只占据一个字长byte,short,char存入数组前转换成i
t,占据一个字长lo
g,double占据2个字长。
f包含对应方法的参数和局部变量,方法的局部变量任意决定顺序,甚r