定义
jvm严格来讲是一种规范,现下最流行的实现是hotspot。
发展史
1996年 SUN JDK 1.0 Classic VM
纯解释运行,使用外挂进行JIT
1997年 JDK1.1 发布
AWT、内部类、JDBC、RMI、反射
1998年 JDK1.2 Solaris Exact VM
JIT 解释器混合
Accurate Memory Management 精确内存管理,数据类型敏感
提升的GC性能
2000年 JDK 1.3 Hotspot 作为默认虚拟机发布
2002年 JDK 1.4 Classic VM退出历史舞台
原码,反码,补码
原码:第一位为符号位(0为正数,1为负数)
反码:符号位不动,原码取反
负数补码:符号位不动,反码加1
正数补码:和原码相同
打印整数的二进制表示
int a=-6;
for(int i=0;i<32;i++){
int t=(a & 0x80000000>>>i)>>>(31-i);
System.out.print(t);
}
-6
原码: 10000110
反码: 11111001
补码: 11111010
-1
原码: 10000001
反码: 11111110
补码: 11111111
0的正数和负数
正数:00000000
负数:10000000
用补码表示为00000000
补码主要用来运算(补码直接相加就是运算结果):
-6+5
11111010
+ 00000101
= 11111111
-4+5
11111100
+ 00000101
= 00000001
-3+5
11111101
+ 00000101
= 00000010
JVM需要对Java Library 提供以下支持:
反射 java.lang.reflect
ClassLoader
初始化class和interface
安全相关 java.security
多线程
弱引用
jvm底层执行代码