您的位置:首页 > 编程语言 > Java开发

解析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.方法区

它主要有以下几个特点:

①线程共享;

②用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: