Java技术体系
2017-03-07 本文已影响498人
zlcook
java技术体系
- Sun官方定义的java技术体系包括:
- Java程序设计语言
- 各种硬件平台上的Java虚拟机
- Class文件格式
- Java API类库
- 来自商业机构和开源社区的第三方Java类库
- JDK:用于支持Java程序开发的最小环境,内容包括:
- Java程序设计语言
- Java虚拟机
- Java API类库
- JRE:支持Java程序运行的标准环境,内容包括:
- Java API类库中的Java SE API子集
- Java虚拟机
以上Java技术体系图是根据各个组成部分的功能来进行划分的。如果按照Java技术服务的领域来划分,可分为以下4个平台:
- Java Caard
- Java ME
- JavaSE(Standard Edition):支持面向桌面级应用的java平台,提供了完整的Java核心API,这个版本以前称为J2SE。
- JavaEE(Enterprise Edition):支持使用多层架构的企业应用(如ERP、CRM应用)的Java平台,除了提高Java SE API外,还对其做了打了扩充,并提供了相关部署支持,这个版本以前称为J2EE。
- javaEE对JavaSE提供的扩展一般以java.*作为包名,而以java.*为包名的都是javaSE API的核心包,但由于历史原因,一部分曾经是扩展包的API后来进入了核心包,因此核心包中也包含了不少javax.*的包名。
Java语言口号
Write Once , Run Anywhere。
JDK命名
- JDK从1.5版本开始,官方在正式文档与宣传上不再使用类似JDK1.5的命名,只在程序内部使用的的开发版本号(Developer Version,例如java --version的输出)中才继续沿用1.5,1.6...。而攻克版本号(Product Version)则改为JDK5、JDK6、JDK7的命名方式。
Java开源
- 2006年11月13日的JavaOne大会上,Sun公司宣布开源java,JDK1.6在12月11日发布。并建立了OpenJDK组织对浙西源码进行独立管理,除了极少量的产权代码(Encumbered Code,这部分代码大多史Sun本身也无权限进行开源处理的)外,OpenJDK几乎包括了Sun JDK的全部代码。
Java虚拟机发展史
Sun公司的java虚拟机
- Sun Classic VM: JDK1.0提供的一个纯解释执行的Java虚拟机。
- Exact VM:JDK1.2提供,具有两级及时编译器、编译器与解释器混合工作模式,使用了准确式内存管理(Exact Memory Management,也叫Non-Conservative/Accurate Memory Management)而得名,即虚拟机可以知道内存中某个位置的数据具体式什么类型。譬如内存中有一个32位的整数123456,它到底式一个reference类型指向123456的内存地址还是一个数值位123456的整数,虚拟机将有能力分辨出来,这样才能在GC(垃圾收集)的时候准确判断堆上的数据是否还可能被使用。Exact VM抛弃了Classic VM基于handler的对象查找方式(原因是进行GC后对象将可能会被移动位置,如果将地址为123456的对象移动到654321,在没有明确信息表明内存中哪些数据是reference的前提,虚拟机不敢把内存中所有为123456的值改成654321的,所以要使用句柄来保持reference值的稳定),这样每次对象都少了一次间接查找的开销,提升执行性能。
- HotSpot VM:(目前一直使用)JDK1.2提供,内置了JIT(Just in Time)编译器,继承了前面2款虚拟机的优点如:Exact Memory Management。自己新技术,如其名:HotSpot指的就是它的热点代码探测技术,ExactVM中也有,热点探测可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。
其它公司的Java虚拟机
- JRockit VM:BEA公司收购的,并将其发展为一款专门为服务器硬件和服务器端应用场景高度优化的虚拟机,由于不太关注程序启动速度只专注与服务端应用,因此JRockit内部不包含解析器实现,全部代码都靠即使编译器编译执行,JRockit的垃圾收集器和MissionControl服务套件等部分的实现,在众多Java虚拟机中也处于领先。
可以运行在Java虚拟机上的语言
可以运行在Java虚拟机上的语言图片来源
对于这些运行于java虚拟机之上,Java语言之外的语言,来自系统级的、底层底层的支持正在迅速增强,JSR-292为核心的一系列项目和功能改进,推动java虚拟机从“Java语言的虚拟机”向“多语言虚拟机"的方向发展。
编写JDK使用的语言
- OpenJDK的各个组成部分(Hotspot、JDK API、JAXWS、JAXP....)有的是使用C++编写的,更多的代码则是使用Java自身实现的。