java语言实现机制

来源:互联网 发布:fifa online 3数据库 编辑:程序博客网 时间:2024/05/17 01:27
 

要学好一门语言,弄清其机制很重要。Java语言实现机制由以下三个主要机制组成:        Java虚拟机(Java Virtual Machine)

java虚拟机(JVM)是在一台计算机上用软件模拟也可以用硬件来实现的假想的计算机。它定义了指令集(相当于中央算是器cpu)、寄存器集、类文件结构栈、垃圾收集堆、内存区域。

  首先,JAVA编译器在获取JAVA应用程序的源代码后,把它编译成符合JAVA虚拟机规范的字节码(byte code)的class 文件,class文件是JVM中可执行文件的格式。JAVA编译器针对JAVA虚拟机产生class文件,JAVA虚拟规范为不同的硬件平台提供了不同的编译代码规范,该规范使JAVA软件独立于平台。然后,JAVA解释器负责将JAVA字节码文件解释运行,边解释边运行,这样,运行速度受到一定影响。为了提高运行速度,JAVA提供了另一种解释运行方法JIT(Just In Time),可以一次解释完,再运行特定平台上的机器码,这样就实现了跨平台、可移植的功能。

在JAVA的运行环境中,每个JAVA解释器,不管它是JAVA开发工具,还是可运行applets的WEB浏览器,都可执行JAVA虚拟机。字节码的运行要经过下面三个步骤:

 (1)加载代码:由Class Loader完成。

   (2)校验代码:由Bytecode Verifier 完成。

   (3)执行代码:由Runtime Interpreter完成。

虚拟机(VM)的执行过程有3个特点:①多线程;
②动态连接;
③异常处理。

Java程序的下载和执行步骤如下:①程序经编译器得到字节代码;
②浏览器与服务器连接,要求下载字节文件;
③服务器将字节代码文件传给客户机;
④客户机上的解释器执行字节代码文件;
⑤在浏览器上现实并交互。                                                        

垃圾回收机制

  在程序的执行过程中,部分内存在使用过后就处于废弃状态,如果不及时进行无用内存的回收,就会导致内存泄漏,进而导致系统崩溃。在C++语言中是由程序员进行内存回收的,程序员需要在编写程序的时候把不再使用的对象内存释放掉;但是这种人为的管理内存释放的方法却往往由于程序员的疏忽而致使内存无法回收,同时也增加了程序员的工作量。而在java运行环境中,始终存在着一个系统级的线程,专门跟踪内存的使用情况,定期检测出不再使用的内存,并进行自动回收,避免了内存的泄露,也减轻了程序员的工作量。

                   Java所有事务都封装在类中,需要创建类的实例来处理,这种动态的实例存储在内存堆中。为了充分利用资源,Java有一个系统级的线程,对内存的使用进行跟踪,使程序员从繁忙的内存中解放出来。该线程可以在系统闲空时对不用的内存进行回收。

Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放。一般来说,堆的是由垃圾回收来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但是由于内存的有限性,JVM在实现的时候都有一个由垃圾回收所管理的堆。垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能。

代码安全检测

Java的安全性体现在多层次上,在编译层有语法检查;在解释层,有字节码校验器、测试代码段格式、规则检查,访问权限和类型转换合法检查,操作数堆栈的上溢与下溢等等;在平台层,通过配置策略,课设定资源域,而无需区分本地或远程。
  字节码的执行需要经过三个步骤,首先由类装载器(class loader)负责把类文件(.class文件)加载到java虚拟机中,在此过程需要检验该类文件是否符合类文件规范;其次字节码校验器(bytecode verifier)检查该类文件的代码中是否存在着某些非法操作,例如applet程序中写本机文件系统的操作;如果字节码校验器检验通过,由java解释器负责把该类文件解释成为机器码进行执行。java虚拟机采用的是"沙箱"运行模式,即把java程序的代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间外的内存,如果是applet程序,还不允许访问客户端机器的文件系统。

原创粉丝点击