Java运行原理与Java虚拟机 - 张华伟

2019-03-02 23:13

Java运行原理与Java虚拟机

张华伟,魏 庆

(河南财经学院,河南 郑州450002)

摘 要: Java

独特的编译和解释过程,使得 Java

语言具有了平台无关性和安全性,而这些特性的关键在于 Java

字节码的

设计以及运行该字节码的 Java

虚拟机。本文旨在从 Java

的运行原理入手,总结了 Java

虚拟机的结构特点、安全性及其发展。 关 键 词: Java

虚拟机;安全;字节码 中图分类号: TP311.15

文献标识码: A

Java Opearting Principle and Java Virtual Machine ZHANG Hua-wei ,

WEI Qing (

Henan Polytechnic Institute ,

Henan Zhengzhou 450002 )

Key words:

java virtal machine ;

safety ; byte 1 Java

的运行原理概述

几乎所有的语言均需要通过编译或者解释才可以被我们的 电脑执行。可是 Java

与众不同,它同时需要这两个过程。当我 们写好了一个 Java

源程序的时候, Java

编译程序先将 Java 源程 序翻译为 Java

的虚拟机可以执行的一种叫做字节码( byte code

)的中间代码。然后再由 Java

平台的解释器将这种字节码

文件翻译成本地的机器指令来执行。这个 Java

平台的核心就是 Java

虚拟机(

Java Virtual Machine , JVM )。如下图所示: 图1 Java的运行原理 我们先来看 Java

的编译过程,这个过程与其他程序设计语 言存在很大的不同。例如,像 C++

这样的语言在编译的时候,是

与机器的硬件平台信息密不可分的,编译程序通过查表将所有 对符号的引用转换为特定的内存偏移量以保证程序运行,并且 编译结果是可执行的代码。而 Java

编译器却不将对变量和方法

的引用编译为数值引用,也不确定程序执行过程中的内存布局, 而是将这些符号引用信息保留在一种扩展名为 .class 的字节码

文件中,这种文件的最大特点就是不包含硬件的信息,因此这种 字节码文件还不能在机器上执行,如果需要执行,还要再由 Java

的解释器在解释执行字节码的过程中创立内存布局,然后再通 过查表来确定每一条指令所在的具体地址。 Java

的解释过程也很特别,传统的解释性语言如 BASIC 在

解释执行的时候,是直接将源程序一条一条地通过解释器进行 词法分析、语法分析等最终翻译为本地的机器指令,并在真正 CPU

上执行。而 Java

的解释过程是先通过 Java

虚拟机读取 Java

字节码文件,然后再将其转换成和系统硬件相关的本地指令,并 最终在 CPU

上执行。

其实,也正是因为这种特殊的编译和解释过程,才使得 Java

这种语言具有了平台无关性和安全性。这些特性的关键在于 Java

的字节码设计。字节码是一套用来在 Java

系统下运行时执

行的高度优化的指令集,执行该指令集的系统是 Java 的虚拟

机。在其标准形式下, Java

的虚拟机就是一个字节码解释器。 为了更好地了解 Java

虚拟机在解决程序可移植和安全等方面所 发挥的作用,我们需要对

Java

虚拟机做更深入的了解。 2 Java

虚拟机的结构 Java

虚拟机是使字节码文件具有跨平台能力的核心结构。 其中,包含对 Java

字节码进行翻译的解释器。该解释器解释执

行字节码的过程分为三步进行:代码的装入、代码的校验和代码 的执行。装入代码的工作由“类装载器”( classloader )完成。类

装载器负责装入运行一个程序需要的所有代码,这也包括程序 代码中的类所继承的类和被其调用的类。当类装载器装入一个 类时,该类被放在自己的名字空间中。除了通过符号引用自己 名字空间以外的类,类之间没有其他办法可以影响其他类。在 作者简介:张华伟( 1977- ),女,河南省郑州市人,硕士,实验师,主 要研究方向:计算机应用研究; 魏 庆( 1977- ),男,河南郑州人,硕士,讲师,主要研究方向:程序 开发与应用。

本台计算机上的所有类都在同一地址空间内,而所有从外部引 进的类,都有一个自己独立的名字空间。这使得本地类通过共 享相同的名字空间获得较高的运行效率,同时又保证它们与从 外部引进的类不会相互影响。当装入了运行程序需要的所有类 后,解释器便可确定整个可执行程序的内存布局。解释器为符 号引用特定的地址空间建立对应关系及查询表。通过在这一阶 段确定代码的内存布局, Java

很好地解决了由超类改变而使子

类崩溃的问题,同时也防止了代码对地址的非法访问。随后,被 装入的代码由字节码校验器进行检查。校验器可发现操作数栈 溢出、非法数据类型转化等多种错误。通过校验后,代码便开始 执行了。 可见, Java

虚拟机的基本执行单元是 .class

文件。一个 Java

的源程序经过编译后会形成一个或多个 .class

文件。因此,带有 多个 .class 文件的 Java

程序在执行时与传统程序相比就有其特

殊性。传统的程序在运行前,系统要装入含有全部程序码的单 一执行文件,而 Java

虚拟机在执行程序时则不同,它遵循“即用 即装入”的原则。具体讲,由于一个 .class

文件可以引用许多其 它 .class

文件,当运行的类需要其他类时, Java

虚拟机即从网络或 本地文件系统装入 .class 文件。 当然,一个 Java

程序也可以直接被编译为本机代码,但是这 对于连接到 Internet 上的每一种 CPU

类型,都要有该程序的对应

版本。这显然不是一个可行的解决方案。因此,对字节码进行 解释是编写真正可移植性程序最容易的方法。 3 Java

虚拟机的安全性 需要注意的是, Java

虚拟机的取得要谨慎小心。因为大多 数 Java

安全的措施都靠无病毒的 Java

虚拟机来完成,如果用户

下载了一个带有病毒的虚拟机,则虚拟机不仅失去防范功能,本


Java运行原理与Java虚拟机 - 张华伟.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:无机材料科学基础习题与解答完整版

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: