1. Java发展史
Java语言的前身:Oak(橡树)
- 1991年4月,James Gosling博士领导的绿色计划开始启动
- 该计划的目的是开发一种能够在各种消费性电子产品(如冰箱、收音机、机顶盒等)上运行的程序架构,叫做Oak
- 1995年,互联网浪潮兴起,Oak更新自己的市场定位
- 在1995年5月23日改名为Java,在SunWorld大会上正式发布Java 1.0 版本,首次提出
Write Once, Run Anywhere
的口号(跨平台特性)
JDK的发展
时间 | 重要事件 | 备注 |
---|---|---|
1996年1月23日 | JDK 1.0 发布 | Java第一个正式版本的运行环境,提供了纯解释执行的Sum Classic VM |
1997年2月19日 | JDK 1.1 发布 | 提供了JAR文件格式、JDBC等最基础的支撑技术 |
1999年4月8日 | JDK 1.2发布 | 把Java技术体系拆分为3个方向:J2SE(面向桌面应用开发)、J2EE(面向企业级应用开发)、J2ME(面向手机等移动终端开发) |
1999年4月27日 | Hot Spot VM发布 | Sun公司1997年从一家名为Lonview Technologies的小公司收购来的; Hot Spot VM,成为JDK 1.3 及其后续版本的Sun JDK和OpenJDK的JVM |
2000年5月8日 | JDK 1.3 发布 | 主要是对一些类库的改进 |
2002年2月13日 | JDK 1.4 发布 | 增加了很多技术新特性:正则表达式、异常链、NIO、日志类、XML解析器等 |
2004年9月30日 | JDK 1.5 发布 | 1. 对语法易用性做了很多改:如自动装箱、泛型、动态注解、枚举、可变长参数、for-each循环; 2. 在JVM的API层面,JSR-133对Java内存模型的增强(volatile和final内存语义)、 java.util.concurrent 并发包;3. 从JDK 1.5开始,官方文档使用 JDK 5、JDK 6这样的命名,JDK 1.X 是程序员内部使用的开发版本号 |
2006年12月11日 | JDK 1.6发布 | 1. 废弃从JDK 1.2 开始的J2SE、J2EE、J2ME的命名,改为 Java SE 6、Java EE 6、Java ME 6; 2. 对JVM的改进:锁与同步、垃圾收集、类加载等都有很多改动; 3. 对synchronized的改进:减少锁获取和释放带来的性能消耗,引入偏向锁和轻量级锁 |
2006年11月13日 | Sun公司宣布将JDK开源 | 开源的JDK叫做OpenJDK |
2011年7月28日 | Oracle发布JDK 1.7 正式版本 | 1. 由于Sun公司经营不善,2009年4月20日,Oracle正式宣布收购Sun公司(这也是为啥Java中处处可见Oracle的商标); 2. Oracle JDK和Sun JDK为商用JDK,OpenJDK是开源JDK; 3. Oracle收购Sun以后,拥有两大商业VM:BEA公司的JRokit和Sun的HotSpot,宣称会在HotSpot的基础上整合JRokit |
2. 一些热点问题
2.1 每个版本的JDK有哪些新特性?
-
JDK版本的特性,笔者更多的关注使用较多的新特性
时间 版本号 新特性 1996年 JDK 1.0 Sun Classic VM、Applet (小应用程序)+ AWT(抽象窗口工具包) 1997年 JDK 1.1 JAR、JDBC、JavaBean、RMI(远程调用)、Inner Class(内部类)、Reflection(反射) 1998年 JDK 1.2 Collections集合类、JIT(Just In Time)编译器、Swing(GUI工具包)、EJB(企业级JavaBean) 200年 JDK 1.3 Timer API、Java Sound API(声音)、RMI通信协议的实现 2002年 JDK 1.4 正则表达式、异常链、Loggin API、NIO、断言 2004年 JDK 1.5 自动装箱、泛型、枚举、for-each、可变长参数、JMM的改进(JSR-133)、java.util.concurrent 2006年 JDK 1.6 对锁与同步、垃圾收集、类加载的改进 20011年 JDK 1.7 try-with-resources语法、catch捕获多个异常、Fork/Join(并行任务框架)、NIO 2.0、Switch支持字符串表达式 20014年 JDK 1.8 Lambda表达式、函数式接口、管道和流、接口的default方法、metaspace替代PermGen space -
笔者最高使用到了JDK 1.8版本,甚至对JDK 1.8版本的新特性使用都不是特别多 😂
-
其他版本的新特性,可以参考链接:
2.2 JDK和JRE的区别?
JRE
- Java Runtime Environment,支持Java程序运行的标准环境
- JRE是一个JVM程序,包含了JVM的标准实现和Java的基本类库
JDK
- Java Developmet Kit,Java开发工具包,支持Java程序开发的最小环境
- JDK是Java开发的核心,集成了JRE及一些其他的工具,如Java代码编译工具javac
总结:
- JRE是支持Java程序运行的标准环境,JDK是支持Java程序开发的工具包,包括JRE和其他的一些工具
- 如果只想运行Java程序,可以只安装JRE;如果想做Java程序开发,需要安装JDK
2.3 JIT(Java即时编译器)
Java程序的编译和运行流程
- 执行
javac
命令。将Java源码编译为各平台通用的字节码文件(.class) - 字节码文件被加载进JVM后,解释器将其逐条翻译为可以本地运行的机器码,从而实现程序的运行
- 为了提高程序的运行效率,针对一些热点代码使用JIT编译优化为机器码,后续再次执行热点代码时,可以直接执行
- javac命令对Java源码的编译,又叫前端编译;JIT对字节码的编译,又叫后端编译
- 参考链接:基本功 | Java即时编译器原理解析及实践