2.堆:存储对象,数组
3.虚拟机栈:存储栈帧
栈帧:每call一个方法,就创建一个栈帧,里面包含局部变量表,操作栈,动态链接,方法出口等信息
局部变量表:存储基本数据类型(int,long,double...),对象引用reference,returnAddress类型。64位点long和double占用两个slot,其余均只占用一个slot。
对象引用:有句柄实现方式和直接指针实现方式。
句柄实现方式:reference指向java堆中的句柄池,每个对象的句柄包含两个指针(指向java堆中实例池中的对象实例以及指向方法区中的对象类型)。
优点:当垃圾收集时,移动对象只涉及修改句柄指针,reference不用修改
直接指针实现方式:reference指向java堆中的对象,对象包含实例数据以及一个指向方法区中对象类型点指针。
优点:访问对象实例速度快,相比句柄,少了一次指针定位。
4.本地方法栈:用于调用本地方法存储相关信息。在sun的hotspot虚拟机中,虚拟机栈和本地方法栈合二为一共用虚拟机栈。
5.程序计数器:字面意思,占用很小的一点点内存。
6.直接内存:虚拟机以外的内存,通过调用本地方法申请。