本文参考《深入java虚拟机第二版》基于jdk1.2,由于书年代比较久远,可能有些东西不太一样,但不妨碍它的价值。
java体系结构包括四种技术:
1.java程序语言本身,也即语法等等。
2.java class文件格式,包括class文件的定义和存储的内容。
3.java api
4.java虚拟机 JVM
我们使用java来编写java程序调用为我们提供的api来操作系统的资源,当运行时先编译成class文件然后由虚拟机装载执行,因此我们编写java应用程序的过程,实际上同时用到了上面的四项技术。java虚拟机和java api一起组成了一个平台,被称为运行时系统,java的跨平台性就体现在这儿。
java虚拟机
java面向网络的核心就是java虚拟机,java虚拟机支持的三大特性:平台无关、安全、网络移动是java面向网络体系结构的三个主要方面。
java虚拟机规范定义了一台java虚拟机应该是什么样的,每个特性的具体实现由各个厂商来实现,并不会完全一样。现在主要的jvm虚拟机除了sun的还有ibm自己的,当然还有openjdk自己实现的jvm。
java虚拟机的主要任务是装载class并且执行其中的字节码。java虚拟机包含一个classloader,它从应用程序或者api中装载class文件,字节码的执行由执行引擎来负责。
执行引擎经历了几代的发展,从一次性解释到即时编译再到自适应化的解释器,jvm执行的速度越来越快。实际上是通过缓存经常被执行的代码块来实现速度上的一种增加,所以缓存的技术可以说是非常重要的,到处可见。
类装载器:
一个java应用程序可以使用三种类加载器(该书由于较早写的两种):启动类加载器,扩展类加载器和系统类加载器,其中最特殊的类加载器是启动类加载器,因为该类不是由java实现的,可能由c也可能由c++实现。其中用户可以实现自己定义的类加载器,通过运行时加载特定的类来完成动态的扩展。同时如果一个类被一个类加载器加载的时候,该类引用的其他类也会使用该类加载器加载。所以被装载的类默认的情况下只能看到被同一个类装载器装载的别的类。通过这种方法,java体系结构为每个类装载器都定义一个命名空间。
java class主要实现了平台的无关性和网络移动性,我们编写的源码都会被编译成class文件,可以在任何的平台运行,只要有jvm,网络移动性又从何说起,class文件被设计的非常及凑,因此可以快速的在网络上传输。其次,java程序师动态链接和动态扩展的,class文件只有在需要的时候才会下载,因此这可以使得java应用程序可以按需下载,分不同的时间下载。