首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java内存储器模型笔记(二)

2012-11-01 
java内存模型笔记(二)二.java虚拟机 (1):概念java虚拟机可能有下面三个概念:1.一个抽象的规范2.一个具体的

java内存模型笔记(二)
二.java虚拟机

(1):概念

java虚拟机可能有下面三个概念:

1.一个抽象的规范

2.一个具体的实现

3.一个运行中的虚拟机实例

?

?????? 对一个运行中的虚拟机实例来说,启动它的入口一定是一个main方法。j2ee中的servlet虽然没有main方法,但它是运行在web容器中,启动容器的入口还是一个main方法。

(2):结构?

?java内存储器模型笔记(二)

从上图展示了以个.class文件从加载到执行的示意图,图中虚线内的部分表示了虚拟机内存模型。

?

1. 方法区:别看名字是方法区,其实这块内存区域存的是类中各种数据信息,它描述了一个类的结构。而真正描述方法结构的内存区域叫做方法表,它可以存在于方法区中。

?

2. 堆:java中各种被创建的实例化对象都被存放于堆中。一个虚拟机只有一个堆空间,所有的线程共享这个堆空间。

?

3. java栈:java栈由一幅幅帧组成,就像一幕幕画面,即记录了这个线程中指令的执行顺序,然后在根据这个顺序执行指令。对每个栈帧来说,它包含了局部变量区,帧数据区和操作数栈。对于一些计算,赋值操作,在操作数栈中进行操作,然后把操作结果弹出,压入到局部变量区中。帧数据区用来支持常量池解析和正常方法返回以及异常派发。当当前方法结束时,由帧数据区中保存的数据返回或者弹出。由于java中可以执行多线程,所以每个线程都它有独立地指令队列。

?

4. pc寄存器(pc计数器):每一个线程都有独立的pc计数器,用来标识不同的线程,它里面的内容总是下一条需要执行的指令地址。

?

5. 本地方法栈:java中有很多native方法,这些方法可以动态地扩展java虚拟机,通常的做法是每个native方法调用一个动态链接库(dll)来执行本地方法,动态链接库可以用c,c++甚至汇编来编写。

?

除了上述5个主要的之外还有一些其他的内存区域:

?

6. 常量池:虚拟机为每个被状态的类型维护一个常量池。常量池作为方法区的一部分存在于方法区中。它是一个类型所用常量的一个有序集合,包括了直接常量和对其他类型,字段和方法的符号引用。

?

7.方法表:为了实现对一个类中方法的快速访问,而独立设计了方法表。虚拟机对每个装载的非抽象类都生成一个方法表,把作为类信息的一部分存在于方法区中。方法表是一个数组,它包含了这个实例可能被调用的所有实例方法的引用。

?

(3). 执行引擎:

任何java虚拟机实现的核心都是它的执行引擎。执行引擎使用指令集来定义,对于每条指令,规范都详细规定了当实现执行到该指令时应该处理什么。java程序的每一个线程都有以个独立的执行引擎实例,生命周期等同于线程的生命周期。

?

热点排行