本章知识点
1.JVM的概念
2.JVM发展历史
3.JVM种类
4.Java语言规范
5.JVM规范
初识JVM - JVM概念
JVM是Java Virtual Machine的简称,意为Java虚拟机
虚拟机:指通过软件模拟的具有完整硬件系统功能的,运行在一个完全隔离环境中的完整的计算机系统。
有哪些虚拟机:VMWare、Visual Box、JVM。
VMWare或者Virtual Box都是使用软件模拟物理CPU的指令集。
JVM使用软件模拟Java字节码的指令集。
JNI(Java Native Interface):java与其他语言(C/C++)通信的API。
初识JVM - Java和JVM的历史
1996年SUN JDK 1.0 Classic VM:纯解释运行,使用外挂进行JIT(Just In Time),java的口号write once run anywhere。
1997年 JDK 1.1: 发布AWT,内部类,JDBC,RMI,反射。
1998年 JDK 1.2 Solaris Exact VM:JIT解释器混合;Accurate Memory Management(精确内存管理),数据类型敏感;提升GC(Gabage Collection)性能。JDK 1.2 开始称为Java 2 J2SE J2EE J2ME,加入swing,collection
2000年 JDK 1.3 HotSpot :作为默认虚拟机发布,加入JavaSound。
2002年 JDK 1.4: Classic VM退出历史舞台加入Asset正则表达式,NIO,IPV6日志,加密类库。
2004年发布 JDK 1.5 即JDK5、J2SE 5、Java 5:加入泛型,注解,装箱,枚举,可变长的参数,Foreach循环,java.util.concurrent并发包。
2006年 JDK1.6 JDK6:脚本语言支持,JDBC4.0,Java编译器API
2011年 JDK 7 发布:延误项目推出到JDK 8 ,动态语言增强,64位系统中的压缩指针,NIO2.0,在java.util.concurrent中加入fork/join是对并发包的一个补充。
2014年 JDK 8 发布:Lambda表达式,语法增强,Java类型注解。
2016年 JDK 9 :模块化。
初识JVM - Java和JVM的历史 - 大事件
使用最为广泛的JVM为HotSpot。
HotSpot为Longview Technologies开发 被SUN收购。
2006年 Java开源 并建立OpenJDK,对java源码进行管理:HotSpot 成为Sun JDK和OpenJDK中所带的虚拟机,名字从之前的J2变为Java SE。
2008 年 Oracle收购BEA:得到JRockit VM。
2010年Oracle 收购 Sun:得到Hotspot。
Oracle宣布在JDK8时整合JRockit和Hotspot,优势互补:在Hotspot基础上,移植JRockit优秀特性。
KVM:由SUN发布,在IOS Android出来之前,广泛用于手机系统。
CDC/CLDC HotSpot:用于手机、电子书、PDA等设备上建立统一的Java编程接口;J2ME的重要组成部分。
JRockit:BEA。
IBM J9 VM:在IBM内部使用。
Apache Harmony:兼容于JDK 1.5和JDK 1.6的Java程序运行平台;与Oracle关系恶劣 退出JCP ,Java社区的分裂;OpenJDK出现后,受到挑战 2011年 退役;没有大规模商用经历;对Android的发展有积极作用。
初识JVM - 规范
Java语言规范:语法、变量、类型、方法。
JVM规范:Class文件类型,运行时数据,帧栈,虚拟机的启动,虚拟机的指令集。
初识JVM - Java语言规范
语法定义:
IfThenStatement:if ( Expression ) Statement;
ArgumentList:Argument、ArgumentList。
词法结构:
\u + 4个16进制数字:表示UTF-16;
行终结符:CR, or LF, or CR LF;
空白符:空格 tab \t 换页 \f 行终结符;
注释、标示符、关键字;
Int:0 2 0372 0xDada_Cafe 1996 0x00_FF__00_FF;
Long:0l 0777L 0x100000000L 2_147_483_648L 0xC0B0L;
Float:1e1f 2.f .3f 0f 3.14f 6.022137e+23f;
Double:1e1 2. .3 0.0 3.14 1e-9d 1e137;
操作:+= -= *= /= &= |= ^= %= <<= >>= >>>=。
类型和变量:
元类型:byte short int long float char boolean double
泛型。
Java内存模型,类加载链接的过程,public static final abstract的定义,异常,数组的使用......
初识JVM - JVM规范
Java语言规范定义了什么是Java语言。
Java语言和JVM相对独立:Groovy、Clojure、Scala。
JVM:主要定义二进制class文件和JVM指令集等。
Class文件格式。
数字的内部表示和存储:Byte -128 to 127......
returnAddress 数据类型定义:指向操作码的指针,不对应Java数据类型,不能在运行时修改,Finally实现需要。
定义PC。
堆、栈。
方法区。
整数的表达:
原码:第一位为符号位(0为正数,1为负数);
反码:符号位不动,原码取反;
负数补码:符号位不动,反码加1;
正数补码:和原码相同。
VM指令集:
类型转化(l2i);
出栈入栈操作:aload astore;
运算:iadd isub;
流程控制:ifeq ifne;
函数调用:invokevirtual invokeinterface invokespecial invokestatic。
JVM需要对Java Library 提供以下支持:反射 java.lang.reflect,ClassLoader,初始化class和interface,安全相关 java.security,多线程,弱引用。
JVM的编译:源码到JVM指令的对应格式,Javap,JVM反汇编的格式。
JDK(Java Development Kit)
Jdk是java程序设计语言,java虚拟机,java API类库的统称,jdk是支持java程序运行,开发的最小环境。
JRE(Java Runtime Environment)
我们把java api类库中的java se的子集和java虚拟机称为jre,jre是支持java程序运行的标准环境。
JDK和JRE所覆盖的范围
java技术体系分为四个平台
Java card:支持一些java小程序(applets)运行在小内存设备(智能卡)上面的平台。
Java ME(micro edition):支持java程序运行在移动终端(手机,PDA)上的平台,对java api有所精简,并加入了针对移动终端的支持,之前称为J2ME,从jdk1.6之后修改。
Java SE(standar edition):支持面向桌面级的应用(如windows下的应用程序)的平台,提供Java核心API,之前称为J2SE。
Java EE(enterprise edition):支持使用多层应用构架的java平台,除了提供java se api外,还对其做了大量的扩充,也支持部署,之前称为J2EE。
Coin项目
自2009年1月起,Coin便是Java7(和Java8)中一个开源的子项目,创建coin项目是为了反映java语言中的微小变动,项目的名字是个双关语——像硬币一样小的变化(small change comes as coins),而“套用一句老话”(to coin a phrase)指的是给Java语言添一个新的表述方式。