第一章 Java体系结构介绍
1.为什么使用Java
通过网络连接起来的智能设备和计算机组成的基础结构开创了软件的新环境
Java的体系结构决定了其程序的安全、健壮和平台无关,可以在很多不同的计算机和设备上运行
2.网络带来的挑战和机遇
挑战:
逐渐增长的以网络为核心的硬件环境
安全性
程序的健壮性
机会:
在线程序发布
运动的对象
平台无关性、安全性、网络移动性,Java体系的这三个方面共同使得Java和发展中的网络计算环境相得益彰。
3.体系结构
Java体系结构包括四个独立但相关的技术:
Java程序设计语言
Java class文件格式
Java应用编程接口(API)
Java虚拟机
Java虚拟机和Java API一起组成了一个“平台”,所有Java程序都在这上面编译。
Java虚拟机和Java API的组合除了被称为Java运行时系统这外,还被称为Java平台
Java程序可以在不同的计算机上运行,这是因为Java平台自己可以用软件实现。
3.1 Java虚拟机
Java的面向网络的核心就是Java虚拟机
Java虚拟机的主要任务是装载class文件并且执行其中的字节码
执行引擎的分类:
一次性解释字节码(最简单的执行引擎)
即时编译器
自适应优化器
硬件芯片构成(用本地方法执行Java字节码,这种执行引擎实际上是内嵌在芯片里的)
当Java虚拟机是由主机操作系统上的软件实现的时候,Java程序通过调用本地方法(native method)和主机交互
Java中的两种方法:
Java方法:由Java语言编写,编译成字节码,存储在class文件中
本地方法:由其它语言(比如C,C++,或者汇编语言)编写的,编译成和处理器相关的机器代码;本地方法保存在动态连接库中,格式是各个平台专有的。
Java方法是与平台无关的,但是本地方法却不是。
本地方法是联系Java程序和底层主机操作系统的连接方法
3.2 类装载器的体系结构
一个Java应用程序可以使用的两种类装载器:
“启动”(bootstrap)类装载器:(这是系统中唯一的)是Java虚拟机实现的一部分
用户定义的类装载器
当被装载的类引用了另外一个类时,虚拟机就会使用装载第一个类的类装载器装载被引用的类
被装载的类默认情况下只能看到被同一个类装载器装载的别的类
被不同的类装载器装载的类存放在不同的命名空间中,它们不能相互访问,除非应用程序显式地允许这样做。
3.3 Java class文件
为Java程序提供独立于底层主机平台的二进制形式的服务
Java编译器把Java源文件的指令翻译成字节码,这种字节码就是Java虚拟机的“机器语言”
Java class文件中字节顺序是高位在前,这与使用何种平台产生这个文件和在何种平台上使用这个文件都没有关系
3.4 Java API
Java API是运行库的集合,它提供一套访问主机系统资源的标准方法
Java虚拟机和Java API class文件是任何平台都要实现的必要部分
Java API class文件为底层主机提供了具有平台无关性的、标准接口的Java程序
3.5 Java程序设计语言
Java技术非常适用于网络,但Java程序设计语言是相当通用的
能够充分利用如下的许多软件技术:
面向对象
多线程
结构化错误处理
垃圾收集
动态连接
动态扩展
Java对直接内存操作的约束:
严格地遵守类型规则
自动垃圾收集
数组边界检查
对对象引用的检查
4.Java体系结构的代价
Java体系结构为侧重网络而付出的代价:
Java程序的执行速度可能比较低
一般情况下,开发者还是无法选择他们的程序将会在哪一种Java虚拟机上运行
在内存管理和调度上的缺陷
最小公分母问题
管理单独应用程序性能的最有效途径,可能就是自主选择虚拟机,但在某些情况下,把可执行部分或者整个程序本地化也许是最佳的解决途径。
预编译:进行静态而不是动态的连接,它产生出完全连接的、单独的本地可执行文件,但是这种可执行文件通常失去了运行时动态创建和连接新类型的能力。
结论:Java系统结构设计的核心并不仅仅在于使程序员更有效率、使程序更健壮,而在于为新兴的以网络为中心的计算环境提供了一种工具。
———————————————————————郁闷的分割线————————————————————————
很难想像使用java进行开发工作而且以这个为生的人会对自己的工具构造和使用方向感动迷惑,可事实上我就是其中的一个人。
想想一年前去参加XX公司面试时,被问到为什么在做监控时,采集数据时得调用别人开发出来的调用C++编写出的动态链接库而封装好的API,自己竟在那一时刻语塞...
不是怕尴尬,而是对自己的无知感到无地自容!