java体系结构概览
java体系结构包括四个方面:
java程序设计语言
java class文件格式
java API
java 虚拟机
1.java虚拟机
java虚拟机的任务是装载class文件并执行字节码
执行引擎的实现有:一次性解释字节码;即时编译器;自适应优化器;
java程序通过调用本地代码和主机交互,访问主机底层系统资源,如上图,本地方法是由其他语言编写的,编译成和处理器相关的机器代码
2.类装载器的体系结构
java应用程序分为两种类装载器,启动(bootstrap)类装载器和用户自定义类装载器
启动类装载器有操作系统对应的语言有不同实现,如C,但是用户自定义的类装载器能够用java编写,是java程序可执行代码的一部分
装载器装载类时采用双亲委派模式,被装载的类默认情况下只能看到由同一个类装载器装载的其他类,每个类装载器都有他自己的命名空间,通过这种方式,能控制不能源文件装载的类之间的相互影响,特别是阻止恶意代码访问和破坏善意代码
3.java class文件:为java程序提供独立于底层主机平台的二进制服务,是java虚拟机的二进制语言,被设计的紧凑适合传输
4.java API
是运行库的集合,提供一套访问主机系统资源的标准方法,在一个平台能够执行java程序之前,必须在这个平台上明确地实现API的功能,JAVA API通过本地方法访问主机资源
5.java程序语言
除了平台移动性,安全性,网络移动性,java语言相比其他语言,还有其他优势:
java语言相比于c++,还有一些能够提高开发效率的特性:
- 1.对内存直接操作的约束:不能直接将引用类型的指针转化为其他类型,除非确定此对象为新类型的前提下;不能直接对指针进行偏移量等运算操作
- 2.自动垃圾收集:不释放对象会导致内存泄露,多次释放一个对象会导致内存冲突
- 3.数组边界检查:每次使用数组的时候,会进行边界检查
- 4.对对象引用的检查:一个空的引用不会导致程序崩溃,只会抛出一个异常
6.java体系结构的代价
- 和其他技术相比,java程序的执行速度可能比较低:但java或许很慢,但不会永远那么慢,1995年第一个java虚拟机诞生采用解释技术,不久,即时编译器诞生了,现在,适应性优化等先进技术能够使java程序和本地编译的c程序相媲美的速度运行
- 在内存管理上的缺陷:垃圾收集器给程序的运行加入不确定性,你不能确定什么时候开始进行垃圾收集,无法确认是否开始,无法确认持续多长时间
- 在线程调度上的缺陷:对线程调度上的约束松散,有利于将java虚拟机移植到不同的硬件,但是,这导致程序员无法控制线程的调度
- 平台无关性导致的最小公分母的问题:某种特性只在一种操作系统上有,API可能决定不支持;当支持某个特性,某些操作系统上不具备时需用API模拟实现
- class文件的逆向编译较容易:工作成果容易被窃取,解决方法--使用混淆器