java内存区域

来源:互联网 发布:linux 复制 当前目录 编辑:程序博客网 时间:2024/04/30 02:11
1、程序计数器
作用:当前线程所执行的字节码的行号指示器。就是工作室通过改变这个计数器的值来选取一条需要执行的字节 码指令、分之、循环、跳转、异常猪濑、线程恢复等功能,都需要一来这个程序计数器来完成。
注意:一个内核同一时间只能处理一条线程指令,因此为了线程切换后能恢复到正常的执行位置,每条线程都需 要一个独立的程序计数器,各条线程之间的计数器五不影响,独立存储。
-----------------------------------------------------------------------------------------------------------------
2、java虚拟机栈
存储内容:局部变量表、操作栈、动态链接、方法出口等信息。其中局部变量表包括编译器可知的各种基本数据 类型(boolean/char/byte/short/int/float/long/double,以及对象引用)
生命周期:随着线程的创建而创建,随着线程的消失而消失,生命周期和线程相同。
作用:每一个方法被调用知道执行完成,都对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
注意:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;
如果虚拟机栈可以动态扩展,但是扩展到无法分配足够的内存时将抛出OutOfMemoryError异常。
-----------------------------------------------------------------------------------------------------------------
3、本地方法栈
本地方法栈与虚拟机栈所发挥的所用非常相似,其区别不过是虚拟机栈为虚拟机执行java方法,而本地方法栈则是为虚拟机使用到的Native方法服务。
-----------------------------------------------------------------------------------------------------------------
4、java堆
存储内容:对象实例,几乎所有的对象实例都存放在这里。
注意:java堆可以处于物理上不连续的存储空间中,只要逻辑上连续就可以了。在实现时也可以实现线程固定大 小的,也可以是可扩展的。
-----------------------------------------------------------------------------------------------------------------
5、方法区
存储内容:加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
注意:方法区可以处于物理上不连续的存储空间中,只要逻辑上连续就可以了。在实现时也可以实现线程固定大 小的,也可以是可扩展的。GC对于该地区的回收目标主要是针对常量池的回收和对类型的卸载。
-----------------------------------------------------------------------------------------------------------------
6、运行时常量池
特点:运行时常量池相对于class文件常量池的一个重要的特征是具备动态性,java语言并不要求常量一定只要在编译器产生,也可以在运行期间将新的常量放入到池中。

0 0
原创粉丝点击