《深入理解java虚拟机》读书笔记1(走近java)

时间:2023-01-01 22:29:10

1)Java技术体系

java程序语言设计
各种硬件平台上的java虚拟机
class文件格式
java api类库
第三方java类库

2)jdk和jre

jdk:用于支持java开发的最小环境,包含java程序语言设计,java虚拟机,java api类库。
jre:支持java程序的运行环境,可以把java api中的Java SE api子集和java虚拟机统称为jre。

3)业务领域划分

Java Card:支持java小程序(Applets)运行在小内存设备上(如智能卡)
Java ME(Micro Edition):支持移动端的平台,对java api有所精简
Java SE(Standard Edition):也叫j2SE,面向桌面应用的平台,完整的java核心api
Java EE(Enterprise Edition):也叫j2ee,支持多层架构的企业应用的java平台.除了提供Java SE api外,还做了大量扩充和部署支持。
(扩展包一般以javax.作为包名,像我在java web开发中就经常遇到,由于历史原因,一些扩展包后来也进入了核心包,所以核心包中也会出现javax.)

4)java里程
》1991年4月,由James Gosling博士领导的绿色计划,开发一种能够用在各种消费性电子产品上的程序架构。这个产品叫做Oak(橡树),也是java的前身。(居然比我小1岁)

》1995年,互联网兴起,Oak迅速找到最适合自己的方向并改名为java。在SunWorld大会上发布了Java1.0,第一次提出“Write Once,Run Anywhere”

》1996年1月23日,jdk1.0发布了,java有了第一个正式版本的运行环境。代表技术有:java虚拟机,Applet,AWT等(AWT(Abstract Window Toolkit),中文译为抽象窗口工具包,该包提供了一套与本地图形界面进行交互的接口,是Java提供的用来建立和设置Java的图形用户界面的基本工具。AWT中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,称之为peers,当利用AWT编写图形用户界面时,实际上是在利用本地操作系统所提供的图形库。由于不同 操作系统的图形库所提供的样式和功能是不一样的,在一个平台上存在的功能在另一个平台上则可能不存在。为了实现Java语言所宣称的“一次编写,到处运行(write once, run anywhere)”的概念,AWT不得不通过牺牲功能来实现平台无关性,也即AWT所提供的图形功能是各种操作系统所提供的图形功能的交集。)

》1996年4月,10个最主要的操作系统供应商声明将在产品中嵌入java技术。5月底,Sun在旧金山召开了首届JavaOne大会。9月,约8.3万个网页应用使用了java技术制作。

》1997年2月19日,Sun发布了jdk1.1。代表技术有:jar文件格式,jdbc,javaBeans,RMI(远程方法调用(Remote Method Invocation)。能够让在某个java虚拟机上的对象像调用本地对象一样调用另一个java 虚拟机中的对象上的方法。)。同时,语法上做了扩展,内部类和反射都是这时候出现的。1.1中途发布了1.1.0-1.1.8九个版本。

》1998年12月4日,jdk迎来了里程碑式的版本jdk1.2,工程代号(Playground竞技场)。这个版本java被拆成了3个方向,j2se,j2ee和j2me。代表技术:EJB,java plug-in,Java IDL,Swing等。并且java虚拟机中第一次内置了JIT(Just In Time)编译器,该版本并存的3个虚拟机(ClassicVM,HotspotVM,ExactVM)除了ClassicVM只能以外挂形式使用JIT,其他两个都内置了JIT。语言上添加了strictfp关键字和Collections集合类。(我们现在用的这么多的东西产自20年前。)

参考:
EJB https://www.cnblogs.com/andy6/p/6143579.html (通过RMI 技术,J2EE将EJB业务逻辑组件创建为远程对象,客户端就可以通过网络调用EJB 对象了。)
Java Plug-in http://blog.csdn.net/shenyue_sam/article/details/43849671
java IDL http://blog.csdn.net/dolphin_notswim/article/details/1840297 (JDK1.1给Java开发人员提供了开发100%纯Java分布式应用的功能,即远程方法调用Java RMI。而Java2平台提供的Java IDL可以在分布式应用中使用非Java语言,也就是说,Java2平台提供的ORB(Object Request Broker)可以和任何遵从CORBA规范的ORB互操作)
Swing Swing是一个以抽象窗口工具包(AWT)为基础用于开发Java应用程序用户界面的开发工具包。

》1999年4月27日,HotSpot虚拟机发布,成为了jdk1.3和以后的sun jdk默认虚拟机。

》2000年5月8日,jdk1.3发布。主要改进:一些类库,JNDI作为平台级服务,使用CORBA IIOP来实现RMI通讯协议,Java 2D API,JavaSound
(JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。)

》2002年2月13日,jdk1.4发布,一个成熟的版本。今天的很多应用Spring,Hibernate,Struts都可以运行在jdk1.4上。新技术:正则表达式,异常链,NIO,日志类,XML解析器和XSLT转换器等。同年,微软的.net framework发布。(强力的竞争对手出现)

参考:
NIO https://www.cnblogs.com/geason/p/5774096.html (基于缓冲区的IO方式)
XSLT(XSLT是一种用于将XML文档转换任意文本的描述语言)

》2004年9月30日,jdk1.5(Tiger)发布,在语法易用性上做出了改进:自动装箱,泛型,动态注解,枚举,可变长参数,foreach。虚拟机层面上改进了java的内存模型,api上提供了java.util.concurrent并发包。

》2006年12月11日,jdk1.6发布。Sun采用了新的命名方式,Java SE 6,java EE 6,java ME 6。改进有:提供动态语言支持,提供编译api和微型http服务器api。同时java虚拟机内部做了大量改进,包括锁与同步,垃圾收集,类加载等算法改进。11月13日,Sun宣布将java开源。

》由于商业竞争和技术竞争,jdk1.7的计划未能如期进行。2009年4月20日,Oracle宣布以74亿美元收购Sun公司并削减了计划。2011年7月28日,Oracle公司发布了java 7 。主要改进包括:
提供新的G1收集器、加强对非Java语言的调用、语言级的模块化支持,升级类加载架构等。

参考:
java 7更新特性 http://yanguz123.iteye.com/blog/1934766

》2014年,java 8发布。新特性参考http://blog.csdn.net/haiyoung/article/details/52693212

》2017年9月22日,java 9正式发布了。新特性参考https://www.oschina.net/translate/did-someone-say-java-9