Java体系结构
2011-08-27 14:00
120 查看
Java语言拥有三大特征:平台无关性、网络移动性和安全性,而Java体系结构对这三大特征提供了强大的支持和保证。
Java体系结构
首先Java的源代码Java文件由编译器编译成Java的二进制字节码class文件,然后class文件由Java虚拟机中的类装载器进行加载,同时类装载器还会加载Java的原始 API Class文件,类加载器主要负责加载、连接和初始化这些class文件以后,就交给虚拟机中的执行引擎运行,执行引擎将class文件中的Java指令解释成具体的本地操作系统方法来执行,而安全管理器将在执行过程中根据设置的安全策略控制指令对外部资源的访问。
Java的执行方式不是编译执行而是解释执行,不同平台上面相同的源代码编译成符合Java规范的相同的二进制字节码,然后再交给支持各自平台的虚拟机去解释执行,"先编译,后解释,再执行"三步走的方式使得Java实现了"一次编写,到处运行"。
Java的网络移动性带来了一种全新的软件模式,在分布式处理模式的基础之上,可以将软件和数据通过网络传送到客户端去,这样确保了客户端有必备的软件来浏览和操纵通过网络传输的数据。
Java体系结构对安全性的支持主要是通过Java语言本身安全性、虚拟机的类加载器和安全管理器以及Java提供的安全API几个方面来实现。
类加载器分成了启动类加载器、标准扩展类加载器、路径类加载器和网络类加载器四种。启动类加载器从本地系统中加载原始的Java API类,用来启动Java虚拟机,而其他三种加载器是在运行时加载用户定义的类,标准扩展类加载器加载的是不同虚拟机提供商扩展的标准Java类,而在classpath中的类由路径类加载器来加载,网络类加载器加载通过网络下载得到的类文件,每一种加载器在加载类的时候都会建立一个加载器实例。类加载器采用双亲委派链模式(这个模式很类似设计模式中提到的责任链模式)除了启动类加载器以外,每个类加载器都有自己的"双亲"。
在加载过程中,当发出加载请求的时候,加载器首先询问它的"双亲"――路径类加载器――来查找并加载这个类,而这个加载器也向它的"双亲"请求加载,一层一层请求上去,直到启动加载器获得请求,来查找并加载这个类,如果这个类没有被加载并且查找不到,返回结果给它的子加载器,由子加载器加载,直到请求返回给原来的加载器,这时还没有加载成功的话,由网络类加载器试图从网络中寻找并下载,如果还不成功将抛出NoClassDefFoundError异常。
这个过程保证了启动类加载器可以抢在标准扩展类加载器之前加载类,而标准扩展类加载器又可以抢在路径类加载器之前加载类,最后才由网络类加载器加载。比如应用被试图加载一个带有恶意代码的java.lang.String类,因为它本来是Java API的一部分,它们加载到的命名空间可以得到被信任类的特殊访问权限,但是由于启动类加载器是最早被加载的,所以java.lang.String只会被启动类从Java原始的API中加载,而带有恶意代码的java.lang.String类不会被加载进来,这样有效的保护了被信任的类边界。
Java体系结构
首先Java的源代码Java文件由编译器编译成Java的二进制字节码class文件,然后class文件由Java虚拟机中的类装载器进行加载,同时类装载器还会加载Java的原始 API Class文件,类加载器主要负责加载、连接和初始化这些class文件以后,就交给虚拟机中的执行引擎运行,执行引擎将class文件中的Java指令解释成具体的本地操作系统方法来执行,而安全管理器将在执行过程中根据设置的安全策略控制指令对外部资源的访问。
Java的执行方式不是编译执行而是解释执行,不同平台上面相同的源代码编译成符合Java规范的相同的二进制字节码,然后再交给支持各自平台的虚拟机去解释执行,"先编译,后解释,再执行"三步走的方式使得Java实现了"一次编写,到处运行"。
Java的网络移动性带来了一种全新的软件模式,在分布式处理模式的基础之上,可以将软件和数据通过网络传送到客户端去,这样确保了客户端有必备的软件来浏览和操纵通过网络传输的数据。
Java体系结构对安全性的支持主要是通过Java语言本身安全性、虚拟机的类加载器和安全管理器以及Java提供的安全API几个方面来实现。
类加载器分成了启动类加载器、标准扩展类加载器、路径类加载器和网络类加载器四种。启动类加载器从本地系统中加载原始的Java API类,用来启动Java虚拟机,而其他三种加载器是在运行时加载用户定义的类,标准扩展类加载器加载的是不同虚拟机提供商扩展的标准Java类,而在classpath中的类由路径类加载器来加载,网络类加载器加载通过网络下载得到的类文件,每一种加载器在加载类的时候都会建立一个加载器实例。类加载器采用双亲委派链模式(这个模式很类似设计模式中提到的责任链模式)除了启动类加载器以外,每个类加载器都有自己的"双亲"。
在加载过程中,当发出加载请求的时候,加载器首先询问它的"双亲"――路径类加载器――来查找并加载这个类,而这个加载器也向它的"双亲"请求加载,一层一层请求上去,直到启动加载器获得请求,来查找并加载这个类,如果这个类没有被加载并且查找不到,返回结果给它的子加载器,由子加载器加载,直到请求返回给原来的加载器,这时还没有加载成功的话,由网络类加载器试图从网络中寻找并下载,如果还不成功将抛出NoClassDefFoundError异常。
这个过程保证了启动类加载器可以抢在标准扩展类加载器之前加载类,而标准扩展类加载器又可以抢在路径类加载器之前加载类,最后才由网络类加载器加载。比如应用被试图加载一个带有恶意代码的java.lang.String类,因为它本来是Java API的一部分,它们加载到的命名空间可以得到被信任类的特殊访问权限,但是由于启动类加载器是最早被加载的,所以java.lang.String只会被启动类从Java原始的API中加载,而带有恶意代码的java.lang.String类不会被加载进来,这样有效的保护了被信任的类边界。
相关文章推荐
- JavaWeb体系结构的理解-8.Struts使用
- java classLoader 体系结构
- java全面的知识体系结构总结
- JAVA加密体系结构
- Java基础与案例开发详解のjava平台的体系结构
- Java 体系结构介绍
- Java集合体系结构分析与比较
- 异常的概念和Java异常体系结构
- Java异常体系结构
- java JVM的体系结构 内存模型
- Java体系结构---垃圾回收
- JAVA的体系结构
- Java体系结构简介
- java技术的体系结构
- Java程序员从笨鸟到菜鸟之(五十)细谈Hibernate(一)hibernate基本概念和体系结构
- 《深入Java虚拟机学习笔记》- 第1章 Java体系结构
- 面试 java 的内存 管理,内存泄露 java 的体系结构
- 【编程语言】java--jvm的内部体系结构浅析
- Java日志框架——Logback的体系结构
- Java异常体系结构