目录
一、概念
- JVM是java virtual machine的简称,是java虚拟机,使用软件模拟java字节码的指令集;
- 虚拟机:通过软件模拟具有完整硬件系统功能的、运行在隔离环境中的完整的计算机系统;
二、发展历史
- 1996年 SUN发布JDK1.0 Classic VM;
- 1997年发布JDK1.1 -AWT、内部类、JDBC、RMI、反射;
- 1998年发布JDK1.2
- 开始称为java2;
- 精确数据类型管理,数据类型敏感;
- 提升GC性能;
- 2000年JDK1.3 Hotspot作为默认虚拟机发布;Hotspot是Longview Technologies开发 被SUN收购
- 2002年JDK1.4 Classic VM退出;
- 2004年JDK1.5 即JDK5
- 泛型、注解、装箱、枚举、可变长参数、Foreach循环;
- 2006年JDK1.6
- java开源、并建立OpenJDk
- HotSpot 成为Sun JDK和OpenJDK中所带的虚拟机
- 脚本语言支持;
- JDBC4.0;
- Java编译器API提供;
- 2008年Oracle收购BEA得到JRockti VM
- 2010年Oracle收购SUN
- 2011年JDK1.7
- 2014年JDK1.8
- Lambda表达式
- 语法增强 Java类型注解
- Stream API、Date Time API 、Optional 类、
- 2017年JDK1.9
三、JVM规范
- 满足JVM规范的语言(Scala、Groovy、Clojure)即可在JVM上运行;
- 定义PC(指令存放)、堆、栈、方法区;
- 原码、反码、补码
- 原码:最高位为符号位,0表示整数、1表示负数;
- 反码:整数反码是原码,负数反码符号位不变其余取反;
- 补码:整数补码与原码一致,负数补码是反码+1;
- 一补码表示整数好处:能正确表示0(正负)、能正确表示加法运算(正负)。
- 特殊方法:<clinit>(类的初始化)、<init>(实例的初始化);
- 提供一系列指令集,如:
- l2i:long类型转int;
- aload、astore:出入栈;
- iadd、isub:加减;
- ifeq、ifne:相等、不相等;
- 提供基础支持,如:
- 反射;
- classloader:类装载(main);
- 多线程;
- 初始化