JVM系列-Java内存区域(一)

运行时数据区域 java

     Java虚拟机在Java程序执行过程当中会把它所管理的内存划分为若干个数据区域,有的区域随着虚拟机进程的启动而存在,有的区域依赖用户线程的启动和结束而创建和销毁。 算法

RUNTIME DATA AREAS SHARED AMONG ALL THEADS:由全部线程共享的数据区 app

THREAD  SPECIFIC RUNTIME DATA AREAS:线程隔离的数据区 jvm

a,程序计数器(PROGRAM COUNTER REGISTER):是一块较小的内存空间,他的做用能够看作事当前线程所执行的字节码的行号指示器。字节码解释器工做时就是经过改变这个计数器的值来选 取下一条须要执行的字节码指令,分支,循环,跳转,异常处理,线程回复等基础功能都须要依赖这个程序计数器来完成。各个线程间的计数器互不影响,独立存 储。 wordpress

b,Java虚拟机栈(JAVA STACK):也是线程私有的,每一个方法被执行的时候都会同时建立一个栈帧用于存储局部变量表,操做栈,动态连接,方法出口灯信息。每一个方法被调用直至执 行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。在java虚拟机规范中,对这个区域规定了两种异常情况:若是线程请求的栈深度大于虚拟 机所容许的深度,将会抛出StackOverflowError异常;若是虚拟机栈扩展时没法申请到足够的内存时会抛出OutOfMemoryError 异常。 线程

c,本地方法栈(NATIVE METHOD STACK):和虚拟机栈发挥的做用类似,区别不过是虚拟机站为虚拟机执行java方法服务,而本地方法栈则是为虚拟机使用到的Native方法服务。 翻译

d,Java堆(HEAP):java虚拟机中所普遍利用的内存中最大的一块,被全部线程共享的一块内存区域,在虚拟机启动时建立。此内存区域用于存放 对象实例。如今收集器基本上都是采用分代收集算法,分为:新生代和年老代;在细致一点有Eden空间,From Survivor空间,To Survivor空间等。 对象

e,方法区(METHOD AREA):各个线程共享的存储区域,用于存储已被虚拟机加载的类信息,常量,静态方法,即时编译器编译后的代码等数据。也就是所说的永久代(Permanent Generation)。 进程

f,运行时常量池:Java虚拟机没有作任何细节的要求,不一样的提供商实现的虚拟机能够按照本身的须要来实现这个内存区域。通常来讲,除了保存Class文件中描述的符号引用外,还会把翻译出来的直接引用也存储在运行时常量池中。 内存

相关文章
相关标签/搜索