JAVA体系结构:JAVA设计语言,JAVA Class文件,JAVA API,JAVA虚拟机。java
1、java虚拟机:api
一、java虚拟机的主要任务是装载class我呢间而且执行其中的字节码。java虚拟机包含一个类装载器,他能够从程序和API中装载class文件。缓存
JAVA API中只有程序执行时那些须要的类才能被装载。字节码由执行引擎来执行。网络
Java虚拟机:一、一种简单的执行引擎,是一次性解释字节码。二、执行引擎很快,消耗内存,在这种状况下,第一次被执行的字节码会被翻译成本地机器代码,多线程
编译出的本地机器代码会缓存,当方法调用的时候能够重用。三、第三种执行引擎是自适应优化器。在这种方法里,虚拟机开始的时候解释字节码,可是会监事运行中程序的优化
活动,而且记录最频繁的代码段。只把最频繁的代码段翻译成本地机器代码。操作系统
二、当java虚拟机是由主机上的操做系统的软件实现的时候,java程序经过调用本地方法和主机交互。java中有两种方法,JAVA方法和本地方法。java方法编译成字节码,存储在class文件中,本地方法是由其余语言编写的,编译成和处理器相关的机器代码。本地方法保存在动态连接库中,格式是各个平台有的。运行中的Java程序调用本地方法时,虚拟机装载包含这个本地方法的动态库,并调用这个方法。经过本地方法,java程序能够直接访问底层的操做系统的而资源。java本地接口(JNI)使得本地方法能够在特定主机系统的任何一个java平台实现上运行。然而java平台供应商不必定必须支持JNI.线程
2、类装载器的体系结构翻译
1.类装载器有两种: 启动类装载器和用户自定义的类的装载器。启动类装载器是Java虚拟机实现的一部分。启动类装载器一般使用某种默认方式从本地磁盘中装载类,包括Java API的类。启动类装载器也被称为原始类装载、系统类装载器或者默认装载器。
Java应用程序可以在运行时安装用户定义的类装载器,这种类装载器可以使用自定义的方式来装载类。
2.每一个类被装载的时候,Java虚拟机都监视这个类,看它究竟是被启动类装载器仍是被用户自定义类装载器装载。当被装载的类引用了另一个类 时,虚拟机就会使用装载第一个类的类装载器 -->去装载 被引用的类。即好比,虚拟机会使用一个特定类装载器装载了Volcano类,它也会使用这个类装载器-->装载Volcano类中所引用到的全部 类。
3.因为Java虚拟机采用2所述的这种方式进行类的装载,因此被装载类 默认状况下只能看到被同一个类装载器装载的别的类。 经过这种方法,Java的体系结构容许在一个Java应用程序中创建多个命名空间,运行时的java程序中的每个类装载器都有它本身的命名空间。
4. 一个Java应用程序可以从同一个类 或者 多个类 中 实例化 多个用户定义的 类装载器。(这句话好好理解下子)而,被不一样类装载器装载的类存放在不一样的命名空间中,它们不能相互访问,除非应用程序显示容许这样作。经过这种方法,就可以阻止恶意代码获取访问和破坏善意代码的权限。设计
3、java class文件
java class文件主要在平台无关性和网络移动性方面使得java更适应于网络。在平台无关性方面的任务是:为java程序提供独立于底层主机平台的二进制形式的服务。除了平台的无关性设计方面,java class文件设计的紧凑,能够很快在网络上传送。java程序的动态连接和动态扩展,class文件在须要的时候才被下载。
4、java API
java API是一套运行库的集合,他提供一套访问知己系统资源的标准方法。java API上的class文件天生就与主机平台密切相关。在一个平台可以支持java程序以前,必须在这个平台上特定的明确实现API的功能。为访问主机上的本地资源,java API调用了本地方法。java api为底层主机提供了具备平台无关性的标准接口的java程序。
5、java程序设计语言
面向对象、多线程、结构化错误处理、垃圾收集、动态连接、动态扩展。