1: Java体系结构

时间:2021-06-16 00:03:04

Java体系结构

Java技术的核心就是Java虚拟机--所有Java程序都在其上运行.

Java体系结构包括四个独立但相关的技术:

1.Java程序设计语言
2.Java class文件格式
3.Java应用编程接口(API)
4.Java虚拟机

Java虚拟机

java的面向网络的核心就是Java虚拟机,它支持Java面向网络体系结构三大支柱:平台无关性、安全性和网络移动性

Java虚拟机是一台抽象的计算机,其规范定义了每个Java虚拟机都必须实现的特性,但是为每个特定实现都留下了很多选择.

Java虚拟机的主要任务是装载class文件并且执行其中的字节码。装载类由类装载器(class loader)完成,它可以从程序和API中装载class文件。字节码由执行引擎来执行

不同的Java虚拟机中,执行引擎可能实现得非常不同。

1.在由软件实现的虚拟机中,最简单的执行引擎就是一次性解释字节码。
2.即时编译,第一次执行的字节码会被编译成本地机器代码,编译出的本地机器代码会被缓存,当方法以后被调用的时候可以重用。
3.自适应优化器,虚拟机开始的时候解释字节码,但是会监视运行中程序的活动,并且记录下使用最频繁的代码段。程序运行的时候,虚拟机只是把那些活动最频繁的代码编译成本地代码,其他的代码由于使用得并不很频繁,继续保留为字节码,由虚拟机继续解释它们.

所以有时候Java虚拟机虽然被称为Java解释器.然而,考虑到执行字节码的方式可能是不同的,可能会是一种误导."Java解释器"只表示是"Java虚拟机",但并没有任何执行技术的含义。

Java中有两种方法:Java方法和本地方法

本地方法:Java程序可以通过一个本地方法接口(Java Native Interface,JNI)装载包含这个本地方法的动态库,并调用这个方法.一旦调用了本地方法,即你的Java程序就失去了平台无关的特性并且和特定的Java平台实现相关了.因为你调用的本地方法可能在其它平台上无法实现或者根本没有,而且其他Java平台的实现或许根本就不支持JNI调用,那么这时候你的Java程序或许只能够在特定的平台上运行.

Java方法:是由Java语言编写并编译成字节码,存储在class文件中,由Java虚拟机执行.虽然最终还是通过Java虚拟机平台调用本地方法的实现来完成程序的功能,但是这些Java程序中所用的API或者方法,都是能够被所有的Java平台供应商所实现,因为这些API或者方法的实现都是包含在虚拟机规范中的.所以只要你的Java程序没有手动通过JNI调用过本地方法,那么你的程序都是平台无关的.

类装载器:启动类装载器和用户自定义类装载器

启动类装载器是系统中惟一的,是Java虚拟机实现的一部分.
自定义类装载器能够在Java应用程序运行时进行动态安装的

每一个类被装载的时候,Java虚拟机都监视这个类,看它到底是被启动类装载器还是被用户类装载器装载。当被装载的类引用了另外一个类时,虚拟机就会使用装载第一个类的类装载器装载被引用的类。

由于Java虚拟机采取这种方式时行类的装载,所以被装载的类默认情况下只能看到被同一个类装载器装载的别的类。通过这种方法,Java的体系结构允许在一个Java应用程序中建立多个命名空间.运行时的Java程序中的每一个类装载器都有它自己的命名空间。这就能够限制阻止不同来源的代码之间的相互访问,有效地提高程序的安全性

Java class文件


Java class文件主要在平台无关性和网络移动性方面使Java更适应于网络。
平台无关性:通常情况下,一个平台上的二进制可执行文件不能在其他平台上工作。而Java class文件是可以运行在任何支持Java虚拟机制硬件平台和操作系统上的二进制文件。
网络适应性:class文件设计的紧凑,因此它们可以快速地在网络上传送。其次由于Java程序是动态链接和动态扩展的,class文件可以在需要的时候才下载。

Java API


Java API是运行库的集合,它提供一套访问主机系统资源的标准方法。Java API是相对安全的,它是保证平台无关性的前提,因为Java虚拟机和Java API class文件是任何Java平台都要实现的必要部分。在一个平台能够支持Java程序以前,必须在这个特定平台上明确地实现API的功能。

Java程序设计语言


尽管Java是为网络而生的,但许多人使用Java写程序还可能是因为想要利用Java程序设计语言的优势
1.面向对象
2.多线程
3.结构化错误处理
4.垃圾收集
5.动态连接
6.动态扩展


这些优势能在极大程度上提高程序员的效率,增强程序的健壮性,与老的程序设计技术(c/c++)相比,具有过得去的性能。