频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
java体系结构介绍
2014-03-08 10:35:17         来源:java体系结构介绍  
收藏   我要投稿
1、JAVA体系结构说明
java体系结构包括四个独立相关的技术: java程序设计语言、 java class 文件格式、java应用编程接口、 java虚拟机
当编写并运行一个java程序时,就同时使用了这四种技术。用java编写源代码,把它编译成java class文件,然后在java虚拟机中运行class文件。当编写程序时,通过调用类中的方法来访问系统中资源如io、网络内存等。当程序运行的时候它可以调用class文件中的实现的方法来满足程序java api的调用。

如图

\

vcyozt652NDUoaKwssir0NS6zc34wufSxrav0NShozxicj4KICAgICBqYXZh0OnE4rv6ysfSu8yov8nS1LHI1/fKx9K7zKiz6c/ztcS8xsvjxvejrMbkamF2YSBhcGm55re2tqjS5cHLw7+49mphdmHQ6cTiu/q2vLHY0OvKtc/WtcTM2NDUo6y1q8rHzqrDv7j2zNjQ1Mq1z9a2vMH0z8LBy7rctuDRodTxoaMgvtm49sD919PLtaO6y+TIu8O/uPZqYXZh0OnE4rv6tryx2NDrxNy5u9a00NBqYXZh19a92sLro6y1q8rH08O6ztbWvLzK9cC01rTQ0MrHv8nS1NGh1PG1xKOsscjI58/W1NrKudPDtcS+zcrHYyYjNDM7JiM0Mzu6zWO1xL3hus+hozxicj4KICAgICBqYXZh0OnE4rv6tcTW99KqyM7O8crH17DU2GNsYXNzzsS8/rKix9LWtNDQxuTW0LXE19a92sLryOfNvKO6PGJyPgogICAgIDxpbWcgc3JjPQ=="" alt="\"> \
java虚拟机中包含一个类装载器也就是经常说到的class loader ,它可以从程序和API装载class文件。javaAPI中只有程序执行时需要的那些类才会被装载。字节码是由执行引擎来执行的。
不同的java虚拟机中,执行引擎可能实现的非常不同。在由java实现的虚拟机中有三种执行引擎:一种叫“一次性解释字节码”、二种叫“即时编译器”英文just-in-time compile、三种叫“自适应优化器”。第二种比第一种执行引擎效率上要高很多,执行速度也更快,但相对的缺点就是内存消耗很大。当内存消耗剧烈的时候,jvm就会出现异常。
在这种情况下,即时编译器第一次被执行的字节码会被编译成本地机器代码,编译出的本地机器代码也会被缓存,当方法以后被调用时候可以重用。
第三种引擎,自适应优化器,在这种方法里,虚拟机开始的时候解释字节码,但是会监视运行种的程序的活动,并且记录下使用最频繁的代码段。程序运行时,虚拟机只把那些活动最频繁的代码编译成本地代码,其他代码由于使用的并不很频繁,继续保留字节码由虚拟机继续即时它们。一个自适应的优化器可以使用java虚拟机种的80%-90%的时间里执行被优化的本地代码,而只需要编译10%-20%对性能有影响的代码。
最后一种虚拟机由硬件芯片构成,它本地方法执行java字节码,这种执行引擎实际上是内嵌在芯片里的。
有时间java虚拟机被称为java解释器。然而,考虑到执行字节码的方式可能不同的这个称谓可能会存在误导,虽然对于直接解释字节码的java虚拟机来说,java解释器是一个合理的名字。但是讨论执行技术时,解释是一种我们所知道的易于实现而执行缓慢的特殊技术。因此解释器只标示是java虚拟机,并不能代表任何含义。
当java虚拟机是由主机操作系统上的软件实现的时候,java程序通过调用本地方法native mehod 和主机进行交互。java中有两种方法,java方法和本地方法。java方法是由java语言编写,之后编译成字节码,存储在class文件中的。本地方法是由其他语言比如c\c++\汇编语言编写的,编译器和处理器的相关代码。本地方法保存在动态链接库中,格式是各个平台专有的。java方法是与平台无关的,本地方法却不是。运行中的java程序调用本地方法时,虚拟机装载包含这个本地方法的动态库,并调用这个方法。本地方法是联系java程序和底层主机操作系统的链接方法。

如图

\

\
通过本地方法,java程序可以直接访问底层操作系统的资源。如果是开发者这样使用,就强依赖平台了。因为本地方法中使用的类库都与平台有关。一个本地平台接口--java本地接口 java native interface .简称jni,使得本地方法可以在特定主机系统的任何一个java平台上实现运行。然而java平台的供应商并不一定必须支持jni。除了jni外。开发者还可以提供自己的本地方法接口。如果希望开发者希望使用特别主机上的资源,又无法从java api访问,那么就可以写一个平台相关的java程序来调用本地方法。如果要保证平台无关性,那么就只能通过java api 来访问底层系统资源。
3、 类装载器的体系结构
在java虚拟机上,存在着多个类装载器,因而结构图中的类装载器方法实际标示的是一个可能包含多个类装载器的子系统。
一个java应用程序可以使用两种类装载器,启动bootstrap类装载器和用户定义的类装载器。启动类装载器是java虚拟机实现的一部分。启动装载器通常使用默认的方式从本地磁盘中装载类,包括java api类。启动类装载器也被叫做原始类装载器、系统类装载器或者默认类装载器。
java 应用程序能够在运行时安装用户定义的类装载器,这种类装载器能够使用自定义的方式类装载类。如图
\\
每一个类被装载的时候,java虚拟机都要监视这个类,看它到底是被启动装载器还是被用户自定义类装载器装载。当被装载的类引用了另外一个类时,虚拟机就会使用装载第一个类的类装载器装载被引用的类。举例说明如果虚拟机使用一个特定的类装载器装载了volcano这个类,它就会使用这个类装载器装载volcano类使用的所有类。如使用了一个叫lava类的一个方法,那么类装载器将动态的建立与lava类之间的关系。
由于虚拟机采用这种方式进行类装载,所以被装载的类默认情况下只能看到被同一个类装载器装载的别的类。通过这种方式java体系结构允许java应用程序开辟多个命名空间。运行时java应用程序中的每一个类装载器都有它自己的命名空间。
以上内容可以说,一个命名空间就是一个独立的内存体,内存与内存之间是不能通信的(这即时tomcat的核心,用户自定义的class loader,tomcat通过实现自己的class lodaer来实现不同的命名空间,装载不同的web工程)。
一个应用程序能够从一个类或者多个类中实例化多个用户定义的类装载器,因此需要多少个用户自定义的类装载器,java应用程序就可以创建多少个。
4、java class 文件
java class文件是一个可以跨平台的二进制文件,是通过java虚拟机来实现编译的。

5、java api
java api是先天内嵌套在java 虚拟机平台上的。如果java 应用程序实现代码就必须先实现java api。 api调用方式如图
\
n荆j鰶6痡麔n岗涧8邖軑崼趒7鉿诮ㄚ溅雿郛坚8邖鉰鰶6痠恒j觯j鰶6痠恒j觯j鰷暙,崼趓V蒢踩诮ㄚ涧%j#j鰵喎源码文件,这就使得有人窃取你的源代码就相当容易。
然而,有一种方法可以避免就是使用混淆器,混淆起可以对类名、参数等都混淆避免他人阅读源码时根据名称了解作者的意图。混淆器在国内使用非常少就不详述了。

8、总结
java 的体系结构还是非常复杂和繁多的,要想对接下来的知识进一步学习,这个还是作为了解比较好的。。











点击复制链接 与好友分享!回本站首页
相关TAG标签 体系结构
上一篇:Hibernate实战_笔记7(Ant)
下一篇:友元函数和友元类
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站