您的位置:首页 > 编程语言 > Java开发

JVM(一)java 体系结构 平台无关性,安全性,网络移动性

2008-04-03 23:26 78 查看
平台无关性

Java中的方法分为两类:
java方法和本地方法native method,java方法是用java语言写的代码存储在class文件中,而本定方法为其他语言所写比如C,C++,汇编语言等,编译成和处理器相关的机器代码,并保存在动态链接库中。

java方法是平台无关的,而native方法是本地相关的。如果希望程序是本地无关的,那么通过调用javaAPI来访问底层资源
如果无法调用javaAPI,那么可以写一个平台相关的java代码,比如JNI等,这样的程序就是本地相关的。

安全性

类装载器的体系结构,class文件检查器,java内置的安全特性,安全管理器

类装载器的体系结构
java虚拟机种存在一个启动类装载器(bootstrap,启动jvm的class文件),或者叫原始类装载器,和多个用户自定义的类装载器。
bootstrap:使用某种默认方式从本地磁盘加载类和javaAPI。
user custom:能够用java实现,能够被编译成class文件,被虚拟机装载,像其他对象一样实例化,由于有用户自定义类装载器,所以不必再编译的时候就知道运行中的java应用程序中最终加入的所有的类,当它运行时,应用程序能够决定它需要哪些额外的类,并且由于类装载器是用java编写,所以它能用任何在java代码中的风格来进行类的装载,通过网上下载,或者DB中读取,甚至动态生成。
每个类被加载的时候,JVM都监视这个类,看它被bootstrap或者userCustom装载,如果一个类被装载器A装载,那么它所依赖的类都会被A装载,因此被装载的类在默认的情况下只能看到被同一个类装载器装载的别的类,通过这个方法,Java体系结构中允许在一个java程序中建立多个命名空间,运行的java程序中的每一个classloader都有它自己的命名空间。
当编写一个java程序的时候,从不同的源文件装载的类可以分隔在不同的命名空间中,通过这种方法就能够使用java类装载器的体系结构来控制任何从不同源文件中装载的代码之间的互相影响。比如applet类装载器,不同来源的javaapplet的class文件来自不同的命名空间中,因此恶意的applet就不能直接妨碍从别的地方下作class

双亲委派式装载模式,每个类装载器都有一个双亲类装载器,如果双亲装载器没有能力装载,那么自己装载。

双亲委派模式保证了父装载器优先,并且只有同一个类装载器装载的类直接才可以互相访问。

网络移动性

通过用户自定义的类加载器,知道如何从网络上下载class文件。

class文件
为java程序提供独立于底层平台的二进制形式的服务,它是可以运行在任何支持jvm的硬件平台和操作系统上的二进制文件。它是一种“机器语言”,它的字节顺序是高位在前,和平台无关。
class文件可以快速的在网上传送,而且可以在需要的时候才下载。
class文件检查器,在运行前对所有的字节码进行一次检测,共分为四趟检查
1.class文件的结构检查,所有的class文件都是以0xCAFEBABE,以及class文件的长度等
2.类型数据的语义检查,查看每个组成部分,比如方法描述符等是否符合语法。除Object类,其他类都必须有个超类,final类没有被子类化,final方法没有被覆盖。
3.字节码验证。
4.符号引用的验证。

javaAPI

它是运行库的集合,提供一套访问主机系统的标准方法,但存在最小公分母问题,不同的系统的差异性,使得设计者只能选择支持的系统特点。

安全管理器

应用程序可以java.lang.SecurityManager或者其子类的实例传递给setSecurityManager(),以此来安装安全管理器


 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: