JVM 的基本结构

一   基本结构函数

    

二  程序计数器(PC)

    PC 寄存器是每一个线程的私有空间,JAVA虚拟机会为每个JAVA线程建立PC寄存器。任意时刻,一个JAVA线程老是在执行一个方法,这个方法被称为当前方法,若是当前方法不是本地方法,PC 寄存器就会指向当前正在被执行的指令。若是当前方法是本地方法,那么PC寄存器的值就是undefined。spa

三 堆

  JAVA堆是和JAVA应用程序关系最为密切的内存空间,几乎全部的对象都放在堆中。线程

  堆空间的通常结构 以下图代理

 

  在绝大多数状况下,对象首先分配在eden区,在一次新生代回收后,若是对象还存活,则会进入S0 或者S1,以后,每通过一次新生代回收,若是对象存活,它的年龄就会加1。当对象的年龄到达必定条件后,就会被认为老年对象,从而进入老年代。指针

 

四 栈

  栈的结构 以下图对象

因为每次函数调用都会生产对应的栈帧,从而占用必定的栈空间,所以,若是栈空间不足,那么函数调用天然没法进行下去,当请求的栈深度大于最大可用栈深度时,系统就会抛出StackOverflowError栈溢出错误。内存

局部变量表

局部变量表示栈帧的重要组成部分之一。用于保存函数的参数以及局部变量。若是函数的参数和局部变量较多,会使得局部变量膨胀,从而每一次函数调用就会占用更多的栈空间虚拟机

操做数栈

 用于保存计算过程的中间结果,同时做为计算过程当中变量临时的存储空间。变量

 

帧数据区

 保存着访问常量池的指针,方便程序访问常量池。请求

五 方法区

  方法区是一块全部线程共享的内存区域。他用保存系统的类信息,好比类的字段,方法,常量池等。方法区的大小决定了系统能够保存多少类,致使方法区溢出。在JDK 6,7中能够理解为永久区。若是系统使用了一些动态代理,那么有可能在运行时生产大量的类。若是这样就须要设置一个合理的永久

相关文章
相关标签/搜索