解析Java内存区域
2012-04-03 21:11
197 查看
根据《Java虚拟机规范(第2版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。如下图所示。
1.程序计数器
它主要有以下三个特点:
①程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器;
②线程私有(每一个线程都有自己的程序计数器);
③如果线程执行的是Java方法,计数器记录的是正在执行的虚拟机字节码指令的地址,如果是本地方法,则计数器的值为空(Undefined);
2.Java虚拟机栈
它主要有以下几个特点:
①线程私有;
②描述了Java方法执行的内存模型:每个方法执行的时候,会同时创建一个栈帧(Stack
Frame)用于存储局部变量、操作栈、动态连接、方法出口等消息。
③每个方法从被调用到执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程
3.本地方法栈
它主要有以下几个特点:
①线程私有;
②功能与虚拟机栈类似,与虚拟机栈不同的是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈是为虚拟机使用到的本地方法(Native方法)服务。
4.Java堆
它主要有以下几个特点:
①线程共享;
②存放对象实例;
③垃圾收集器的主要区域,有时候被叫做“GC堆”;
5.方法区
它主要有以下几个特点:
①线程共享;
②用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据;
1.程序计数器
它主要有以下三个特点:
①程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器;
②线程私有(每一个线程都有自己的程序计数器);
③如果线程执行的是Java方法,计数器记录的是正在执行的虚拟机字节码指令的地址,如果是本地方法,则计数器的值为空(Undefined);
2.Java虚拟机栈
它主要有以下几个特点:
①线程私有;
②描述了Java方法执行的内存模型:每个方法执行的时候,会同时创建一个栈帧(Stack
Frame)用于存储局部变量、操作栈、动态连接、方法出口等消息。
③每个方法从被调用到执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程
3.本地方法栈
它主要有以下几个特点:
①线程私有;
②功能与虚拟机栈类似,与虚拟机栈不同的是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈是为虚拟机使用到的本地方法(Native方法)服务。
4.Java堆
它主要有以下几个特点:
①线程共享;
②存放对象实例;
③垃圾收集器的主要区域,有时候被叫做“GC堆”;
5.方法区
它主要有以下几个特点:
①线程共享;
②用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据;
相关文章推荐
- [置顶] JVM--解析Java内存区域及数据的内存分配与线程安全之间的一些联系
- 深入探究JVM(1) - Java的内存区域解析
- 深入探究JVM(1) - Java的内存区域解析
- 探索深入理解java虚拟机之java内存区域解析(1)
- <<深入Java虚拟机>>-第二章-Java内存区域-学习笔记
- 深度解析Java内存的原型
- Java 内存区域和GC机制
- Java内存区域
- java学习系列4(Java 内存区域和GC机制)
- java内存区域探析
- Java内存管理:深入Java内存区域管理
- Java内存区域划分、内存分配原理
- Java内存区域与内存溢出异常
- java内存区域与对象的访问
- (0)Java内存区域与内存溢出异常
- Java内存区域与模拟内存区域异常
- Java内存管理原理及内存区域详解
- java 内存区域
- Java学习之【深入理解Java虚拟机---Java内存区域】
- java内存区域和内存溢出异常