1、基本概念
1.1、JVM是Java Virtual Machine的简称
意思是java虚拟机
1.2、虚拟机
指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统
1.3、有哪些虚拟机
VMWare\Visual Box\JVM
1.4、VMWare或者Visual Box都是使用软件模拟物理CPU的指令集
1.5、JVM使用软件模拟Java字节码的指令集
2、Java和JVM的历史
2000年JDK 1.3 hotspot作为默认虚拟机发布,加入JavaSound
2004年发布JDK1.5 - 泛型、注解、装箱、枚举、可变长的参数、Foreach循环
2014年JDK1.8发布 - Lambda表达式、语法增强、Java类型注解
3、JVM
Oracle在JDK8时整合JRockit和Hotspot
KVM - sun发布的,IOS\ANDROID之前
4、JVM规范
- class文件类型
- 运行时数据
- 帧栈
- 虚拟机的启动
- 虚拟机的指令集
4.1 byte
-128~127
4.2 整数的表达
原码
第一位为符号位(0为正数,1为负数)
反码
符号位不动,原码取反
负数补码
符号位不动,反码加1
正数补码
和原码相同
例如:
正数5,在计算机中的表示:
00000101
负数-6,在计算机中:
原码:10000110
反码:11111001
补码:11111010
负数-1,在计算机中:
原码:10000001
反码:11111110
补码:11111111
怎样打印一个整数在计算机中的二进制表示呢:
int a=6;
for(int i=0;i<32;i++){
int t=(a & 0x80000000>>>i)>>>(31-i);
System.out.print(t);
}
问题:计算机中为什么要用补码来表示整数呢?
1、用补码可以无歧义表示0
)
2、用补码可以很好地进行整数运算
Float的表示
- 支持IEEE754
float 32为的表示
s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm
一位的符号位+8位的指数位+23位的尾数位
实际上的尾数位有24位,还有一位的隐藏的尾数附加位,如果e全部为0,那么尾数的附加位为0,否则尾数的附加位为1
float表示的数值为:sm2^(e-127)
例如:-5
1 10000001 01000000000000000000000
-1 * 2^(129-127) * (1 + 2^-2) — 这里1表示附加位,m部分从左往右,表示2的-2次幂