深入理解Java虚拟机

前言

 学习Java以后是一定会碰到这本书的。

正文
1. 体系框架

Java包括四个独立但是相关的技术:

  • Java程序设计语言
  • Java class文件格式
  • Java 应用编程接口(API)
  • Java虚拟机


      当编写并运行一个Java程序是,就同时体验了这四种技术,用Java编程语言编写源代码,把它编译成Java class文件,然后再在Java虚拟机中运行class文件,当编写程序时,通过调用类(这些类实现了Java API)中的方法来访问系统资源(比如I/O)。当程序运行的时候,它通过调用class文件中实现了Java API的方法来满足程序的Java API调用,可以再图1-1中看到这四者之间的联系。

    图片说明

    Java 虚拟机和Java API一起组成了一个“平台”,所有Java程序都在这上面编译,Java虚拟机和Java API的组合除了被称为Java运行时系统之外,还被称为Java平台。Java程序可以再不同的计算机上运行,这是因为Java平台自己可以用软件实现。

2. java 虚拟机

 Java的面向网络的核心就是Java虚拟机,它支持Java面向网络体系结构三大支柱的所有方面,平台无关性,安全性和网络移动性。
 Java虚拟机的主要任务就是装载class文件并运行其中的字节码
 不同的 Java虚拟机,执行引擎实现也不同,在软件实现的虚拟机中,最简单的执行引擎就是一次性解释字节码。还有一种引擎执行更快,但是消耗内存,叫“即时编译”,在这种情况下,第一次执行的字节码会被编译成本地机器代码,并且会被缓存起来,当方法以后被调用的时候可以重用。第三种是自适应优化器,虚拟机开始的时候解释字节码,但是会监视运行中程序的活动,并且记录下使用最频繁的代码,程序运行的时候,虚拟机只把那些活动最频繁的代码编译成本地机器代码,其他代码使用不频繁,继续保持字节码。


3.安全性

Java 安全模型包括四个部分:
(1) 类装载器体系结构;
(2) class文件检验器;
(3)Java内置安全特性;
(4)安全管理器;
 前三个部分为了保持Java虚拟机的实例和它正在运行的应用程序的内部完整性,使得他们不被下载的恶意或有漏洞的代码侵犯,相反(4)这个安全管理器,它主要用于保护虚拟机的外部资源不被虚拟机内部运行的恶意或者有漏洞的代码侵犯。这个安全管理器是一个单独的对象,在运行的Java虚拟机中,它在访问控制——对于外部资源的访问控制——中起中枢作用。
 当Java API 要进行一个潜在的不安全的代码时,它将遵循两个步骤,首先,Java API会检查有没有安装安全管理器,如果没有,则跳过检查,直接进行不安全的行为,否则,它将调用安全管理器的“check”方法,如果这个操作被禁止,那么这个“check”方法会抛出一个安全异常,这将导致API方法立即停止,这个危险的操作就不会进行,如果这个操作被允许,那么“check”方法将简单的返回,在这种情况下,API方法将继续执行,并且执行这个不安全的操作。


4.Java 网络移动特性

sun公司的工程师把Java技术和WWW融合起来的方法——也就是Java市场成功的关键所在——就是创造了一种Java程序的特殊形式,可以在web浏览器内部运行:Java applet(Java应用小程序)。Java applet展示了Java 基于网络的三大特性:网络移动性,平台无关性,安全性。
当浏览器遇到一个包含applet标记的网页时,它把信息从标记送到一个运行中的Java程序,Java程序创建一个新的用户自定义的类装载器对象(或者重用已有的那个),来装载这个applet的初始class文件,然后他首先调用applet的初始化init()方法,在调用start()方法,这样就初始化applet,applet需要的其他class文件按照按需下载的原则在动态连接的处理过程中下载。


5.Jini 服务对象:网络移动对象的上示例

 Java结构的另一个承诺:对象的网络移动性,对象在网络中穿梭,携带着定义自己的类,加上表示对象状态的快照数据。对象的网络移动性可以简化软件开发者设计和部署分布式系统的工作。通过对象序列化和远程方法调用(RMI),Java API提供了一个在本地对象模型上扩展而成的分布式对象模型,打破了Java虚拟机之间的界限,分布式对象模型使得一个虚拟机中的对象可以引用另一个虚拟机中的对象,调用那些远程对象的方法,在虚拟机之间把对象当做参数,返回值或者方法调用抛出来的意外来交换。
 Jini技术利用了对象网络移动性的全部好处,Jini是一系列协议和API的集合,可以支持分布式系统的编写和部署,目标是把正在快速发展的,没有硬盘的嵌入式设备连接到网络中来,Jini体系结构的一个特备组成部分是服务对象,它可以告诉我们对象移动性是多么有用。

5.1 Jini是什么

在Jini的“思维”方式中,网络是由“服务”组成,客户机或者其他服务可以利用这些服务。服务可能是网络上的任何形式,它们准备好实现某种功能,硬件设备,软件服务器,或者通信信道,甚至是用户自己都可以成为服务。

5.2 Jini如何工作
  Jini提供了一个运行时基础结构,以允许服务提供者为客户机提供服务,也使得客户机可以找到并访问服务。基础构架的三个部分是:网络上的查找服务,服务提供者(比如是支持Jini的设备)和客户机。
 运行时基础构架采用一种网络级协议——称为”探索”,以及两种对象级协议——分别称为“加入”和“查找”。“探索”让客户机和服务可以找到查找服务,“加入”让服务在查找服务中注册自己。“查找”让客户机询问查找服务,是否存在一种服务可以帮助自己完成工作。
  Jini使用的网络移动的对象(特别是网络移动的服务对象)提高了分布式系统编程的抽象级别,有效地把网络编程转变为面向对象编程。
 Jini体系通过吧面向对象编程引入网络,带来了面向对象的一个基本优点:接口和实现的分离。比如,服务对象允许客户机用好几种方法来获取服务,客户从查询服务下载,在本地运行的服务对象可以代表整个服务。或者说,服务对象可以作为远程服务器的一个代理,当客户机调用服务对象的方法的时候,它把请求通过网络传送回服务器,那才是真正工作的地方。本地服务对象和远程服务器也能共同分担工作。
 同一服务器接口的不同实现可以使用完全不同的方法和完全不同的网络协议。服务器不同的实现方法可以针对不同的环境优化,服务器的方法也可能会随着时间而变化。对于客户机来说,不管服务是如何实现的,任何服务看起来都是公开的接口。
 Jini试图提升分布式系统编程的抽象级别,从网络协议级别提升到对象接口级别。在越来越多的嵌入式设备都要连接到网络上的情况下,分布式系统的各个部分可能来自不同的供应商,Jini让供应商不需要依附于某一种底层网络协议(这种协议让他们的设备互连)。相反,供应商只需要在互连设备的高层Java接口层上达成一致就行了。级别从网络协议层提升到对象接口层,可以让供应商更加集中于高层的概念而非拘泥在基层细节中。
通过分布式系统编程提升抽象层次和提供清晰的分离接口和实现,Jini带来了面向对象的好处。这都是因为Java对网络移动对象的支持,对象在网络上移动,是通过Java的底层结构,对象序列化,RMI来实现的,并通过Jini服务对象展示出来,这些技术给网络带来了巨大的好处。


6.网络移动性:Java设计中心

 网络移动的Java软件除了前面说的两种Java applet和Jini服务对象形式之外,还可以有很多形式。比如说如同applet和服务对象,其他形式的Java网络移动性都会在一个主机Java应用程序的上下文中运行,网络移动的Java代码需要的class文件会用用户自定义的类装载器装载,用户自定义的类装载器可以用自定义的方法从网络上下载class文件,这通常是启动类装载器所做不到的。并且因为网络移动的class文件并非总是值得信任的,需要用用户自定义的类装载器提供的单独的命名空间来防止恶意的或者是有漏洞的代码。最后,因为网络移动的class并不是总是被信任,通常会有一个安全管理器或者一个控制器来简历网络移动代码的安全政策。
 理解Java体系的关键,就是在于理解代码和对象的网络移动能力是Java设计的中心。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值