自动内存管理机制(1)——运行时数据区域

来源:互联网 发布:uc怎么绑定淘宝账号 编辑:程序博客网 时间:2024/05/29 00:31

Java程序设计语言、虚拟机、API类库——>JDK

API 类库中SEAPI子集和虚拟机——>JRE


1.程序计数器当前线程执行的字节码的行号指示器。针对java方法,如果是Native方法,计数器值为空。

                           唯一一个没规定OutOfMemoryError的区域。

2.java虚拟机栈:java方法执行的内存模型,方法执行同时创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口灯信息。经常意义上说的“栈内存”指虚拟机栈中的局部变量表局部变量表存放了编译期可知的各种基本数据类型、对象引用类型。

                          会抛出StackOverflowError异常(请求栈深度大于所允许的深度);OutOfMemoryError异常(可动态扩展时无法申请到足够内存)。

3.本地方法栈:使用Native方法服务。虚拟机栈执行Java方法(字节码)服务。

                        会抛出StackOverflowError异常和OutOfMemoryError异常。

4.java堆:虚拟机启动时创建,存放对象实例,几乎所有对象实例在这里分配内存,可用于物理内存不连续逻辑连续的内存空间。是垃圾收集器管理的主要区域,也称为GC堆。

                      会抛出OutOfMemoryError异常。

5.方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等。这区域的回收目标主要是针对常量池的和对类型的卸载。

*运行时常量池:方法区的一部分,用于存放编译期生成的各种字面量和符号引用。运行期间也可能将新的常量放入池中。会抛出OutOfMemoryError异常。

*直接内存:JDK1.4中新加入NIO(NewInput/Output)类,引入一种基于通道与缓冲区的I/O方式,可以使用Native函数库直接分配堆外内存。会抛出OutOfMemoryError异常。

阅读全文
0 0
原创粉丝点击