• 2005-01-05

    Java Threads(2)

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://befresh.blogbus.com/logs/568096.html

    实际上,我们一般会对“Java虚拟机”这个术语有三种不同的理解:
    1、抽象规范
    Sun公司制定的《The Java Virtual Machine Specification》就是抽象规范,任何想实现Java VM就必须遵守这个规范。
    2、具体实现
    所有的JDK中都会包含Java VM的具体实现和Java API,Sun、IBM和Bea等几家厂商就实现了各自的VM,它们的实现细节是一定是不同的,但是它们都必须遵守抽象规范。
    3、正在运行的实例
    当我们编写的Java程序运行时,就是有VM的实例在运行。

    在考虑底层系统时,我们一般会比较注意CPU和存储器,CPU完成运算指令调度,存储器存储运算中间结果,这也是冯.偌依曼机最重要的两部分。

    冯.偌依曼机的基本思路:
    * 采用二进制形式表示数据和指令;
    * 程序与数据预先存入主存,工作时连续自动高速顺序执行.
    * 由运算器,存储器,控制器,I/O设备五大部分组成。

    它的核心就是“存储程序”的思想,我们从中可以看出Java VM与冯.偌依曼机的基本思路相当一致。

    从前一篇blog的经典图片中,我们就能完全理解VM的整体结构,也会明白虚拟机结构中最重要的两部分:
    1、运行时数据区
    就是存储器,包含多种不同形式的数据区,譬如方法区、堆和Java栈等。运行时数据区可以存储字节码、对象、局部变量以及运算的中间结果等。
    2、执行引擎
    任何Java VM实现的核心都是它的执行引擎,有点类似于CPU,执行引擎进行指令调度,Java VM有自身、独立的指令集。

    执行引擎与Java VM一样,也有三种不同的理解,包括抽象规范、具体实现和运行时的实例。

    作为运行时实例的执行引擎就是一个线程,正在运行的Java程序中的每一个线程都是一个独立的虚拟机执行引擎的实例。

    Java VM一般会存在两种不同的线程:一种是对用户程序不可见的,这样的线程不需要是实现的执行引擎的实例,譬如GC;另外一种就是属于用户运行程序的线程,这些线程都是在实际工作的执行引擎。

    在《The Java Virtual Machine Specification》的第8章中详细介绍了“线程和锁”,它主要就是规范了共享主存储器与Java VM线程的交互,也就是上述两者的交互。


    收藏到:Del.icio.us




    引用

    下面Blog引用了该文: