历史上的原因是,OpenJDK是JDK的开放原始码版本,以GPL(General Public License)协议的形式放出(题主提到的open就是指的开源)。在JDK7的时候,OpenJDK已经作为JDK7的主干开发,SUN JDK7是在OpenJDK7的基础上发布的,其大部分原始码都相同,只有少部分原始码被替换掉。使用JRL(JavaResearch License,Java研究授权协议)发布。至于OpenJDK6则更是有其复杂的一面,首先是OpenJDK6是JDK7的一个分支,并且尽量去除Java SE7的新特性,使其尽量的符合Java6的标准。 Java虚拟机规范 根据定义,JVM是虚拟机。即一个模拟真机操作的软件机器。像真机一样,它有一个指令集,一个虚拟计算机架构和一个执行模型。它能够运行用这个虚拟指令集编写的代码,就像真机可以运行机器代码一样。 HotSpot 是JVM概念的一个实现。它最初由Sun开发,现在由Oracle拥有。 JVM规范还有其他实现,例如 JRockit , IBM J9 等等。 jdk的发展史1995年5月:Oak——>jdk1.0 write Once run anyWhere 1996年1月:jdk1.0 jvm classicVM 1996年9月:首届javaOne大会 1997年2月:jdk1.1 内部类 反射 jar文件格式 jdbc ,javaBean ,rmi 1998年 jdk1.2 j2Se j2EE j2Me swing jit HotSpot VM 2000年5月:jdk1.3 Timer java2d 2002年2月:jdk1.4 Struts Hibernate,Spring1.X基于配置文件 正则表达式 Nio 日志 Xml解析器 2004年9月:jdk1.5 tiger:自动装箱拆箱,泛型,注解,枚举,变长参数,增强for循环…… Spring2.X 注解配置 2006年4月:jdk1.6 javaSe javaEE javaMe jdk6 提供了脚本语言支持、编译API、http服务器API 2011年7月: jdk1.7 Oracle收购sun公司74亿美元 2014年3月:jdk8 lanbda表达式 接口新增默认方法与静态方法 新增了四个重要的函数式接口:函数形接口 、供给形接口、消费型接口、判断型接口 2017年9月:jdk9 jshell 统一jvm日志系统 javadoc对HTML5的支持 目录结构 …… 2018年3月:jdk10 2018年9月:jdk11 2019年2月:jdk12 2019年9月:jdk13 -------------------------------------------------------------------------------------------- SUN的JDK版本从1.3.1开始运用HotSpot虚拟机, 2006年底开源,主要使用C++实现,JNI接口部分用C实现。 编译器:java源代码被编译器编译成class文件(字节码),java字节码在运行时可以被动态编译(JIT)成本地代码. 解释器: 解释器用来解释class文件(字节码),java是解释语言(书上这么说的)。 -------------------------------------------------------------------------------------------\ JDK从1.5版本开始,在官方的正式文档与宣传资料中已经不再使用类似“JDK1.5”的名称,只有程序员内部使用的开发版本号才继续沿用1.5,1.6,1.7的版本号,而且公开版本号则改为JDK5, JDK6, JDK7,为了行文一致,本书所有场合统一采用开发版本号的命名方式。 -------------------------------------------------------------------------------------------- i++ 和 ++i 的区别:
之前之所以说 i++ 不是原子操作,即使使用 volatile 修饰也不是线程安全,就是因为,可能 i 被从局部变量表(内存)取出,压入操作栈(寄存器),操作栈中自增,使用栈顶值更新局部变量表(寄存器更新写入内存),其中分为 3 步,volatile 保证可见性,保证每次从局部变量表读取的都是最新的值,但可能这 3 步可能被另一个线程的 3 步打断,产生数据互相覆盖问题,从而导致 i 的值比预期的小。 |
|