标题:
Java中的四个核心技术思想
[打印本页]
作者:
qingqing3721
时间:
2012-5-9 01:08
标题:
Java中的四个核心技术思想
Java曾经成为一个庞大而复杂的技术平台,对于开发人员而言,要想更好的掌握Java技术,深化理解底层的技术处理细节必不可少。对核心概念和思想的掌握可以协助我们举一反三、举一反三,有助于提升我们对整个Java平台的理解力。这里所引见的是Java技术平台的几个核心概念,其中所蕴含的思想有助于我们更深入的理解Java技术。
Java虚拟机
Java虚拟机的主要任务是装在class文件并且执行其中的字节码。Java虚拟机包括一个类装载器,它可以从程序和API中装载class文件。Java API中只要程序执行时需要的那些类才会被装载。字节码由执行引擎来执行。
不同的Java虚拟机中,执行引擎可能实现得十分不同。在由软件实现的虚拟机中,最简单的执行引擎就是一次性解释字节码。另一种执行引擎更快,但是也更消耗内存,叫做"即时编译器(just-in-time compiler)"。在这种状况下,第一次被执行的字节码会被编译成本地机器代码。编译出的本地机器代码会被缓存,当方法以后被调用的时分可以重用。第三种执行引擎是自顺应优化器。在这种方法里,虚拟机开始的时分解释字节码,但是会监视运转中程序的活动,并且记载下运用最频繁的代码段。程序运转的时分,虚拟机只把那些活动最频繁的代码编译成本地代码,其他的代码由于运用得不是很频繁,继续保留为字节码-由虚拟机继续解释它们。一个自顺应的优化器可以使得Java虚拟机在80%~90%的时间里执行被优化过的本地代码,而只需要编译10%~20%的对性能有影响的代码。
当Java虚拟机是由主机操作系统上的软件实现的时分,Java程序经过调用本中央法(native method)和主机交互。Java中有两种方法: Java方法和本中央法。Java方法是由Java言语编写,编译成字节码文件,存储在class文件中的。本中央法是由其他言语(比方c,c++或汇编言语)编写的,编译成何处理器相关的机器代码。本中央法保存在动态链接库中,格式是各个平台专有的。运转中Java程序调用本中央法时,虚拟机装载包括这个本中央法的动态库,并调用这个方法。本中央法是联系Java程序和底层主机操作系统的连接方法。
经过本中央法,Java程序可以直接访问底层操作系统的资源。一个本中央法接口(Java Native Interface, JNI)-使得本中央法可以在特定主机系统的任何一个Java平台实现上运转。
假设希望运用特定主机上的资源,它们又无法从Java API访问,那么可以写一个平台相关的Java程序来调用本中央法。假设希望保证程序的平台无关性,那么只能经过Java API来访问底层系统资源。
类装载器的体系结构
一个Java应用程序可以运用两品种装载器:"启动(bootstrap)"类装载器和用户定义的类装载器。启动类装载器(这是系统中独一的)是Java虚拟机实现的一局部。启动类装载器通常运用某种默认方式从本地磁盘中装载类,包括Java API类(启动类装载器也被称为原始类装载器、系统类装载器或许默认类装载器)。
Java应用程序能够在运转时装置用户定义的类装载器,这品种装载器能够运用自定义的方式来装载类。例如,从网络下载class文件。尽管启动类装载器是虚拟机实现的实质局部,而用户定义的类装载器不是,但用户定义的类装载器能够用Java来编写,能够被编译成class文件,能够被虚拟机装载,还能够像其它对象一样实例化。
由于有用户定义类装载器,所以不必再编译的时分就知道运转中的Java应用程序中最终会加入的一切的类。用户定义的类装载器使得在运转扩展Java应用程序成为可能。当它运转时,应用程序能够解决它需要哪些额外的类,能够决议是运用一个或是更多的用户定义的类装载器来装载。由于类装载器是用Java编写的,所以用任何在Java代码中可以表述的作风来进行类装载。这些类可以经过网络下载,可以从某些数据库中获取#溃溃垃甚至可以动态生成。
每一个类被装载的时分,Java虚拟机都监视这个类,看到它究竟是被启动类装载器还是被用户定义类装载器装载。当被装载的类援用了另外一个类时,虚拟机就会运用装载第一个类的类装载器装载援用的类。例如,假设虚拟机运用一个特定的类装载器装载Volcano这个类,它就会运用这个类装载器装载Volcano类运用的一切类。
由于Java虚拟机采取这种方式进行类的装载,所以被装载的类默认状况下只能看到被同一个类装载器装载的别的类。经过这种方法,Java的体系结构允许在一个Java应用程序中建立多个命名空间。运转时的Java程序中的每一个类装载器都有自己的命名空间。
Java应用程序可以创建多少个(或多少种)被不同的类装载器装载的类寄存在不同的命名空间中,它们不能相互访问,除非应用程序显示地允许这么做。当编写一个Java应用程序的时分,从不同源文件装载的类可以分隔在不同的命名空间中。经过这种方法,就能够运用Java类装载器的体系结构来控制任何不同源文件中装载的代码之间的相互影响,特别是能够阻止恶意代码获取访问或破坏善意代码的权限。
Web浏览器是一个动态扩展的例子,Web浏览器运用用户定义的类装载器从网络下载用于Java applet的class文件。Web浏览器运用一个用来装置用户定义类装载器的Java应用程序。这个用户定义的类装载器通常被称为Java Applet类装载器,它知道如何向HTTP效劳器央求class文件。Java Applet可以作为动态扩展的例子,因为Java应用程序并不知道它什么时分会开始从网络下载浏览器央求的class文件。只要当浏览器遇到有Java applet的页面时,才决议能否需要下载class文件。
Web浏览器启动的Java应用程序通常为每个提供class文件的网络地址区分创建不同的用户定义类装载器,因此,不同的用户定义类装载器装载不同来源的class文件。这就可以把它们区分放置在Java主机应用程序的不同命名空间之下。由于不同来源的Java applet文件放置在不同的命名空间中,恶意的Java applet代码就不会直接访问从别的中央下载的class文件。这就能够限制或阻止不同来源的代码之间的相互访问。
Java class文件
Java class文件主要在平台无关性和网络挪动性方面使Java更适合网络。它在平台无关性方面的任务是:为Java程序提供独立于底层主机平台的二进制形式的效劳。这种途径途径打破了C或许C++等言语所遵循的传统,运用这些传统言语写的程序通常首先被编译,然后被连接成独自的、专门支持特定硬件平台和操作系统的二进制文件。通常状况下,一个平台上的二进制可执行文件不能在其他平台上任务。而Java class文件时可以运转在任何支持Java虚拟机的硬件平台和操作系统上的二进制文件。
当编译和连接一个C++程序时,所获得的可执行二进制文件只能在指定的硬件平台和操作系统上运转,
莱俪迩
因为这个二进制文件包括了对目标处理器的机器言语。而Java编译器把Java源文件的指令翻译成字节码,这种字节码就是Java虚拟机的"机器言语"。
class文件设计得紧凑,因此它们可以快速地在网络上传送。其次,由于Java程序是动态连接和动态扩展的,class文件可以在需要的时分才下载。这个特点使得Java应用程序能够布置从网络上下载class文件的时间,从而可以最大限制地减少终端用户的等待时间。
Java API
Java API经过支持平台无关性和平安性,使得Java顺应于网络应用。Java API是运转库的集合,它提供了一套访问主机系统资源的标准方法。运转Java程序时,虚拟机装载程序的class文件所运用的Java API class文件。一切被装载的class文件(包括从应用程序中和从Java API中提取的)和一切曾经装载的动态库(包括本中央法)共同组成了再Java虚拟机上运转的整个程序。
在一个平台能偶支持Java程序以前,必须在这个特定平台上明确地实现API的功用。为访问主机上的本地资源,Java API调用了本中央法。由于Java API class文件调用了本中央法,Java程序就不需要再调用它们了。经过这种方法,Java API class文件为底层主机提供了具有平台无关性、标准接口的Java程序。对Java程序而言,无论平台外部如何,Java API都会有异样的表现和可预测的行为。正是由于在每个特定的主机平台上明确地实现了Java虚拟机和Java API,因此,Java程序自身就能够成为具有平台无关性的程序。
Java API在Java平安性模型方面也有奉献。当Java API的方法进行任何有潜在危险的操作(比方进行本地磁盘写操作)之前,都会经过查询访问控制器来检验能否失掉了授权。访问控制器是一个类,该类用来执行栈检验,已决议能否允许某种操作。
欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/)
Powered by Discuz! 6.0.0