`
xgbjmxn
  • 浏览: 270393 次
  • 性别: Icon_minigender_1
  • 来自: 新乡
社区版块
存档分类
最新评论

Java虚拟机内部构成浅析

阅读更多
    *
      Java虚拟机内部构成浅析
    * http://developer.51cto.com  2009-06-18 13:51  佚名  JavaEye  我要评论(0)

      Java虚拟机由五部分组成:指令集、寄存器、栈、无用单元回收堆、方法区域,本文将带您深入Java虚拟机的内部体系。

      Java虚拟机是一个想象中的机器,正如其名是虚拟的。在实际计算机上市通过软件模拟实现的。它有虚拟的硬件,如处理器、堆栈、寄存器等,还有相应的指令系统。它屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码即字节码,这样就可以在多个平台上不加修改的运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这正是Java语言具有与平台无关性的原因。

      Java虚拟机由五部分组成:指令集、寄存器、栈、无用单元回收堆(garbage-collected-heap)、方法区域。它们构成了 Java虚拟机的逻辑成份,不依赖任何实现技术或组织方式,但他们的功能必须在真实机器上以某种方式实现。Java虚拟机支持大约248个字节码。每个字节码执行一种基本的CPU运算,例如,把一个整数加到寄存器,子程序转移等。Java指令集相当于Java程序的汇编语言。其中的指令包含一个单字节的操作符,用于指定要执行的操作,还有0个或多个操作数,提供操作所需的参数或数据。许多指令没有操作数,仅有一个单字节的操作符构成。虚拟机的內层循环的执行过程如下:

      do{取一个操作符字节:根据操作符的值执行一个动作;}while(程序未结束)

      由于指令系统的简单性,使得虚拟机的执行过程十分简单,从而有利于提高执行效率。指令中操作数的数量和大小是由操作符决定的。如果操作数比一个字节大那么它存储的顺序是高字节优先。例如,一个16位的参数存放时占用两个字节,其值为第一个字节×256+第二个字节。字节码指令流一般只是字节对齐的。指令tableswitch和lookup是例外,这两条指令内部要求强制的4字节边界对齐。
      
      Java虚拟机的寄存器用于保存机器的运行状态,与微处理器中的某些专用寄存器类似。Java虚拟机的寄存器有4种:pc:Java程序计数器,optop:指向操作数栈顶端的指针,frame:指向当前执行环境的指针,vars:指向当前执行方法的局部变量区第一个变量的指针。Java虚拟机是栈式的,他不定义或使用寄存器来传递或接受参数,其目的是为了保证指令集的简洁性和实现时的高效性特别是对于寄存器数目不多的处理器。所有寄存器 都是32位的。

      Java虚拟机的栈有三个区域:局部变量区、运行环境区、操作数区。局部变量区每个Java方法使用一个固定大小的局部变量集。它们按照与ars寄存器的字偏移量来寻址。局部变量都是32位的。长整数和双精度浮点数占据了2个局部变量的空间,却按照第一个局部变量的索引来寻址。虚拟机规范并不要求在局部变量中的64 为的值是64位对其的虚拟机提供了把局部变量中的值装载到操作数栈的指令,也提供了把操作数栈中的值写入局部变量的指令。

      在运行环境中包含的信息用于动态链接,正常的方法返回以及异常传播。运行环境包括对指向当前类和当前方法的解释器符号表的指针,用于支持方法代码的动态链接。方法的class文件代码在引用要调用的方法和要访问的变量时使用符号。动态链接把符号形式的方法调用翻译成实际方法调用,装载必要的类以解释还没有定义的符号,并把变量访问翻译成与这些变量运行时的存贮结构相应的偏移地址。动态链接方法和变量使的方法中使用的其它类的变化不会影响到本程序的代码。如果当前方法正常地结束了,在执行了一条具有正确类型的返回指令时,调用的方法会得到一个返回值。执行环境在正常返回的情况下用于恢复调用者的寄存器,并把调用者的寄存器计算器增加一个恰当的值,一跳过已执行过的方法。调用指令然后再调用者的执行环境中继续执行下去。异常情况下在Java中被称作 error(错误)或exception(异常),是throwable类的子类。在程序中出错的原因是动态链接出错如无法找到所需class文件,运行时出错如一个空指针的引用。程序使用了throw语句。

      当异常发生时,Java虚拟机采取如下措施:检查与当前方法相关的catch子句表,每个catch子句包含其有效指令范围,能够处理异常类型以及处理异常代码块地址。与异常相匹配的catch子句应该符合一下条件:造成异常的指令在指令范围内,发生异常类型是其能够处理的异常类型的子类型。如果找到了匹配的catch子句,那么系统转到异常处理模块执行;否则重复寻找直到找到为止。如果找不到则得到一个“未截获异常”的结果并返回到当前方法的调用者好像异常刚刚在其调用者中发生一样。如果调用者仍然没有找到相应的异常处理,那么系统将调用一个缺省的异常处理模块。
      
      机器指令只从操作数栈中取操作数,对他们进行操作,并把结果返回到栈中。栈用于给方法传递参数并从方法接受结果,也用于支持操作数的参数并保存操作结果。 Java的堆是一个运行时数据区,类的实例从中分配空间。Java语言有无用单元回收功能:不给程序员显式释放对象的能力。不规定具体使用的无用单元收集算法。可以根据系统需求使用各种各样的算法。

      方法区与传统语言中的编译后代码或是unix进程中的正文段相似。保存方法代码(编译后的Java代码)和符号表。在当前的Java实现中,方法代码不包括在无用回收集堆中但计划在将来的版本实现。


      

      【编辑推荐】
         1. Java虚拟机几个命令行参数说明
         2. Java虚拟机发展回顾 为跨平台而生
         3. Java虚拟机概念及体系结构
         4. 如何分析Java虚拟机死锁
         5. Java虚拟机的类的装载
分享到:
评论

相关推荐

    深入java虚拟机.pdf

    深入 Java 虚拟机.pdf Java 虚拟机(Java Virtual Machine,JVM)是 Java 语言的 runtime 环境,是 Java 程序执行的核心组件。它提供了一个平台无关的环境,允许 Java 程序在不同的操作系统和硬件平台上运行。 一...

    Java虚拟机规范.Java SE 8版.zip

    《Java核心技术系列:Java虚拟机规范(Java SE 8版)》由Oracle官方发布,Java虚拟机技术创建人撰写,国内资深Java技术专家翻译。书中基于全新Java SE 8,完整且准确地阐述Java虚拟机规范,是深度了解Java虚拟机和...

    Java虚拟机规范 Java SE 8版-带目录-pdf

    Java虚拟机规范 Java SE 8版-带目录-pdf,本书完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析...

    java虚拟机规范高清中文版本(java SE 8版本)

    第1章 :简单地介绍了Java虚拟机的历史并吹捧了←_← 一下Java的平台无关性(一次编译,到处运行); 第2章:概览Java虚拟机整体架构; 第3章:介绍如何将Java语言编写的程序转换为虚拟机指令集; 第4章:定义...

    自己动手写Java虚拟机 (Java核心技术系列)@

    本书摒弃了传统的以解读枯燥的Java虚拟机规范文档和分析繁琐的Java虚拟机源代码的方式来讲解Java虚拟机,取而代之的是,以实践的方式,引导读者如何从零开始构建和实现一个Java虚拟机,整个过程不仅能让读者做到对...

    Java虚拟机规范中文版(JavaSE7).pdf

    Java虚拟机(JVM)是Java编程语言的核心组成部分,它是一种抽象的计算设备,能够运行Java字节码。Java虚拟机规范(Java SE 7版)是定义JVM行为的官方文档,确保所有Java平台的实现遵循相同的规则,以提供跨平台的...

    Java虚拟机规范 JavaSE7

    Java虚拟机(JVM)是Java程序运行的基础,它负责执行Java字节码,提供了一个与平台无关的执行环境。JVM规范定义了JVM的结构、指令集和运行时数据区,以及如何执行指令和处理异常。自1999年以来,JVM规范经历了多次...

    Java虚拟机规范中文版.pdf

    为了更好地理解Java虚拟机的内部工作原理,开发者通常需要对JVM规范有深入的认识。例如,对JVM的垃圾回收算法的了解,有助于开发者编写出更适合自动内存管理的代码。了解JVM的线程模型,有助于编写高性能的多线程...

    java虚拟机规范(java SE7)

    java虚拟机规范,高清PDF版本,含有目录结构:第一章:引言; 第二章:java虚拟结构(运行时区域内存:寄存器,java虚拟机栈,java堆,方法去,运行时常量池,本地方法栈); 第三章:为java虚拟机编译; 第四章:...

    Java虚拟机(Java VM) msjavax86 微软java虚拟机

    Java虚拟机的内部结构包括类装载器、运行时数据区、执行引擎、本地方法接口和本地库。其中,类装载器负责加载类文件,运行时数据区存储线程的工作数据,执行引擎解析并执行字节码,本地方法接口允许JVM调用非Java...

    Java虚拟机规范(中文版).pdf

    ### Java虚拟机规范(JVM)概览 #### 核心概念与重要性 《Java虚拟机规范(JavaSE7版)》是理解Java虚拟机(JVM)运作机制的基石,由Tim Lindholm、Frank Yellin、Gilad Bracha和Alex Buckley等人撰写,后由周志明、...

    Java虚拟机规范(中文版) Java SE 7

    《Java虚拟机规范(Java SE 7版)》是Java开发者深入了解Java虚拟机内部机制的重要参考资料。通过学习这份文档,开发者不仅可以更好地理解Java程序的工作原理,还可以利用这些知识优化应用程序的性能。对于那些希望...

    实战Java虚拟机.pdf_java_

    随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java...《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

     作者以易于理解的方式深入揭示了java虚拟机的内部工作原理,深入理解这些内容,将对读者更快速地编写更高效的程序大有裨益!  本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行...

    java 虚拟机原理浅析

    java 虚拟机原理浅析,希望大家来交流

    java虚拟机各种版本

    Java虚拟机(JVM)是Java编程语言的核心组成部分,它为Java程序提供了跨平台的运行环境。Java程序在编写完成后,会被编译成字节码(.class文件),这些字节码可以在任何装有JVM的系统上运行,实现了“一次编写,到处...

    MiniJavaVM—个Java虚拟机的设计和实现

    MiniJavaVM—个Java虚拟机的设计和实现 在本篇文章中,我们将详细介绍 MiniJavaVM 的设计和实现,包括其总体架构、功能、运行环境和开发工具,以及具体的实现步骤。 第一章绪论 Java 虚拟机(Java Virtual ...

Global site tag (gtag.js) - Google Analytics