Java概述
java技术体系:
环境:
- JDjava程序开发的最小环境
- java程序设计语言
- java虚拟机
- javaAPI类库
-
JRE:支持java程序运行的标准环境
-
javaSEAPI子集
-
java虚拟机
-
javaCard:支持java程序运行在小内存设备上的平台(智能卡)。
javaME:支持java程序运行在移动终端上的平台(手机、PDA)。
javaSE:支持java程序面上桌面级应用的平台(Windows下的应用程序)。
javaEE:支持使用多层架构的企业级应用(ERP、CRM应用)。
Java语言发展史
- 1991-4:java语言的前身 JamesGosling领导的开始启动绿色计划Oak(开发一种能够在各种消费性电子产品上运行程序的架构:机顶盒,冰箱)。
- 1995-5-23:java诞生:Java1.0发布,Oak改名java,提出一次编写,到处运行
- 1996-1-23:JDK1.0发布:提供纯解释执行的java虚拟机、Applet、AWT等
- 1997-2-19:JDK1.1发布:JAR文件格式、JDBC、JavaBeans、RMI、内部类、反射。
- 1999-4-8:JDK1.1.0-JDK1.1.8发布
- 1998-12-4:JDK1.2发布:拆分3个技术体系:J2SE、J2EE、J2ME,java虚拟机第一次内置JIT编译器。添加strictfp关键字,Collections集合类。
- 1999-4-27:HotSpot发布。
- 2000-5-8:JDK1.3发布。JNDI为平台及服务提供。使用CORBA_IIOP实现RMI通信协议。增加JavaSound类库。
- 2002-2-13:JDK1.4发布。正则表达式、异常链、NIO、日志类、XML解析器、XSLT转换器。
- 2004-9-30:JDK1.5发布。自动装箱、泛型、动态注解、枚举、可变参数、遍历循环(foreach循环),改进java内存模型。提供java.util.concurrent并发包。
- 2006-12-11:JDK1.6发布。提供动态语言支持(通过内置Mozilla_JavaScript_Rhino引擎),提供编译API和微型HTTP服务器API。Java虚拟机内部改进:锁与同步、垃圾收集、类加载
- 2011-7-28:JDK1.7发布:提供G1收集器、加强对非java语言的调用支持(JSR-292,目前没有完全实现),升级类加载架构。
Java虚拟机发展史
- Sun Classic VM:JDK1.0使用,世界上第一款商用Java虚拟机,只能用纯解释器的方式来执行Java代码,
如果要使用JIT编译器,必须使用外挂(但是如果外挂了JIT编译器,JIT编译器就完全接管了虚拟机的执行系统,解释器便不再工作了),
其中sunwjit就是sun提供的外挂编译器。如果使用了编译器执行,每一个方法,每一行代码都进行编译。无论他们执行的频率是否具有编译的价值。Java虚拟机很慢的信息就是在这时候开始在用户中心树立起来的。- ExactVM:具备现代高性能虚拟机的雏形:两级即时编译器、编译器和解释器混合工作。使用准确式内存管理。
如内存中有一个32位的整数123456,到底是一个reference类型指向123456的内存地址还是一个123456的整数,虚拟机有能力分辨,抛弃以前Classic VM基于Handler的对象查找方式,每次定位对象都少了一次间接查抄的开销,提升执行性能
- Sun HotSpot VM:最初由LongviewTechnologies设计,在1997年由Sun公司收购。HotStop指它的热点代码探测技术,可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。如果一个方法或方法中有效循环次数很多,将会分别处罚标准编译和OSR(栈上替换)编译动作:通过编译器和解释器协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无需等待本地代码输出才能执行程序,即时编译的时间压力也相对减小,这样有助于引入更多的diamante优化技术,输出质量更高的本地代码。
- KVM:简单,清凉,高度可移植,运行速度较慢。用于Android、IOS等手机操作系统出现前的手机平台
- CDC/CLDC:JavaME重要支柱,在手机,电子书,PDA等设备上建立统一的java编程接口。
- Squawk VM:运行于SunSPOT(一种手持的WIFI设备),也曾用于JavaCard。Java代码比重很高的嵌入式虚拟机实现。如:类加载器,字节码验证器,垃圾收集器,解释器,编译器,线程调度。
- JavaInJava:Java语言实现Java本身的运行环境,即元循环(指语言自身来实现其运行环境),必须运行在另外一个宿主虚拟机上,内部没有JIT编译器。代码只能以解释器模式运行
- Maxine VM:和JavaInJava相似,只有勇于启动JVM加载器使用C语言编写。有先进的JIT编译器和垃圾收集器,么有解释器,可在宿主模式或独立模式下执行,执行效率接近HotStop Client VM水平。
- JRockit:曾经号称世界上速度最快的Java虚拟机、专注于服务端(服务器硬件和服务器应用场景),程序启动速度较慢,内部不包含解释器实现,全部代码靠即时编译器编译后执行。
- J9VM:最初由IBMSmallTalk虚拟机拓展来,当时有一个bug是由8k值定义引起的,后来解决了这个错误,这个版本的虚拟机称为K8,后来扩展支持Java的虚拟机,称为J9。他的主要市场是和IBM产品搭配以及在AIX和z/OS平台上部署java应用。
- Azui VM:
- 在HotSpot基础上进行大量改进,运行于AzulSyetems公司转悠硬件Vega系统上的java虚拟机。
- Liquid VM:即现在的JRockit_VE,相当于运行在BEAHypervisor系统上的JRockitVM的虚拟化版本。不需要操作系统的支持、本身实现了一个专用操作系统的必要功能。
- Apache Harmony:Apache软件基金会旗下兼容JDK1.5和JDK1.6的java程序运行平台。包含自己的虚拟机和Java库。没有通过TCK认证。Apache基金会曾要求Sun公司提供TCK使用授权,但遭到拒绝,后来Oracle收购Sun之后,Apache退出了JCP。这是目前为止Java社区最严重的一次分裂。
- Dalvik VM:Android平台核心组成部分之一。并不是一个Java虚拟机,没有遵循java虚拟机规范,不能直接运行Java的Class文件,可以运行通过Class文件转化成dex文件,使用寄存器架构而不是JVM中常见的栈架构,在Android2.2中yi6tigong即时编译器实现,在执行性能上有了很大的提高
- Microsoft:Windows下性能最好的Java虚拟机,当时Sun公司曾阻止微软在Windows中支持Java