1、Java 的工作原理 Java 语言引入了 Java 虚拟机,具有跨平台运行的功能,能够很好地适应各种 Web 应用。同时,为了提高 Java 语言的性能和健壮性,还引入了如垃圾回收机制等新功能,通过这些改进让Java 具有其独特的工作原理。1Java 虚拟机Java 虚拟机(Java Virtual Machine,JVM)是软件模拟的计算机,它可以在任何处理器上(无论是在计算机中还是在其他电子设备中)安全兼容地执行保存在.class 文件中的字节码。Java 虚拟机的“机器码”保存在.class 文件中,有时也可以称之为字节码文件。Java 程序的跨平台特性主要是指字节码文件可以在任何具有
2、 Java 虚拟机的计算机或者电子设备上运行,Java 虚拟机中的 Java 解释器负责将字节码文件解释成为特定的机器码进行运行。因此在运行时,Java 源程序需要通过编译器编译成为.class 文件。Java 虚拟机的建立需要针对不同的软硬件平台来实现,既要考虑处理器的型号,也要考虑操作系统的种类。由此在 SPARC 结构、X86 结构、MIPS 和 PPC 等嵌入式处理芯片上,在UNIX、Linux、Windows 和部分实时操作系统上都可实现 Java 虚拟机。2无用内存自动回收机制在程序的执行过程中,部分内存在使用过后就处于废弃状态,如果不及时进行回收,很有可能会导致内存泄漏,进而引发
3、系统崩溃。在 C+语言中是由程序员进行内存回收的,程序员需要在编写程序时把不再使用的对象内存释放掉,这种人为管理内存释放的方法往往由于程序员的疏忽而致使内存无法回收,同时也增加了程序员的工作量。而在 Java 运行环境中,始终存在着一个系统级的线程,专门跟踪内存的使用情况,定期检测出不再使用的内存,并自动进行回收,避免了内存的泄露,也减轻了程序员的工作量。3代码安全性检查机制安全和方便总是相对矛盾的。Java 编程语言的出现使得客户端计算机可以方便地从网络上上传或下载 Java 程序到本地计算机上运行,但是如何保证该 Java 程序不携带病毒或者没有其他危险目的呢?为了确保 Java 程序执行
4、的安全性,Java 语言通过 Applet 程序来控制非法程序的安全性,也就是有了它才确保 Java 语言的生存。Java 字节码的执行需要经过以下 3 个步骤:(1)由类装载器(class loader)负责把类文件(.class 文件)加载到 Java 虚拟机中。在此过程需要检验该类文件是否符合类文件规范。(2)字节码校验器(bytecode verifier)检查该类文件的代码中是否存在着某些非法操作,例如 Applet 程序中写本地计算机文件系统的操作。(3)如果字节码校验器检验通过,由 Java 解释器负责把该类文件解释成为机器码进行执行。注意:Java 虚拟机采用“沙箱”运行模式,
5、即把 Java 程序的代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间以外的内存。如果是 Applet 程序,还不允许访问客户端机器的文件系统。Java 的运行环境无论哪种语言都需要有它特定的运行环境,也就是平台。Java 语言同样不例外。但是如何理解Java 程序与硬件环境无关呢?几乎所有的语言都需要通过编译或者解释才可以被计算机执行,但是 Java 有一点不同,它同时需要这两个过程。其实,也正是因为这个原因才使 Java 这种语言具有了平台无关性。当完成一个 Java 源程序后,首先,通过 Java 翻译程序将它编译成一种叫做字节码的中间代码,然后再由 Java 平台的解释器
6、将它转换成为机器语言来执行,这一平台的核心就是 JVM。Java 的编译过程与其他的语言不同。像 C+这样的语言,在编译时它是与计算机的硬件平台信息密不可分的。编译程序通过查表将所有指令的操作数和操作码等转换成内存的偏移量,即程序运行时的内存分配方式,目的是保证程序正常运行。而 Java 却是将指令转换成为一种.class的文件,这种文件不包含硬件的信息,需要执行时只要经过安装有 JVM 的机器进行解释,创建内存分配后再通过查表来确定一条指令所在的地址。这样就有效地保证了 Java 的可移植性和安全性。Java 平台具有这样的特性和它的结构有关。通常一个程序运行的平台是一个硬件或者软件运行的环
7、境,目前比较流行的是 Windows XP、Linux、Solaris 和 MacOS。Java 的平台不太一样,它由两个部分组成,即 JVM 和应用程序设计接口。1JVMJVM 是 Java 平台的核心,为了让编译产生的字节码能更好地解释与执行,因此把 JVM 分成了 6个部分:JVM 解释器、指令系统、寄存器、栈、存储区和碎片回收区。JVM 解释器:即这个虚拟机处理字段码的 CPU。JVM 指令系统:该系统与计算机很相似,一条指令由操作码和操作数两部分组成。操作码为 8 位二进制数,主要是为了说明一条指令的功能,操作数可以根据需要而定,JVM 有多达 256 种不同的操作指令。寄存器:JV
8、M 有自己的虚拟寄存器,这样就可以快速地与 JVM 的解释器进行数据交换。为了功能的需要,JVM 设置了 4 个常用的 32 位寄存器:pc(程序计数器)、optop(操作数栈顶指针)、frame(当前执行环境指针)和 vars(指向当前执行环境中第一个局部变量的指针)。JVM 栈:指令执行时数据和信息存储的场所和控制中心,它提供给 JVM 解释器运算所需要的信息。存储区:JVM 存储区用于存储编译过后的字节码等信息。碎片回收区:JVM 碎片回收是指将使用过的 Java 类的具体实例从内存进行回收,这就使得开发人员免去了自己编程控制内存的麻烦和危险。随着 JVM的不断升级,其碎片回收的技术和算
9、法也更加合理。JVM 1.4.1 版后产生了一种叫分代收集技术,简单来说就是利用对象在程序中生存的时间划分成代,以此为标准进行碎片回收。2Java 应用程序设计接口Java Application Programming Interface 简称 Java API,其中文名为 Java 应用程序设计接口。它是一个软件集合,其中有许多开发时所需要的控件,可以用它来辅助开发。Java API 和 JVM 构成了 Java 运行的基本环境,这两种软件整合在一起处于计算机之上,通过这两种软件,Java 平台把一个 Java 应用程序从硬件系统分离开,从而很好地保证了程序的独立性。为了更好地适应开发的需要,Java 的设计者们提供了 3 种版本的 Java 平台:Java 2 Micro Edition (J2ME )、Java 2 Standard Edition(J2SE)和 Java 2 Enterprise Edition (J2EE),每一种版本都提供了丰富的开发工具以适应不同的开发需要。