文章目录
- JVM的概念
- JVM的规范定义:jvm主要定义了二进制class文件和JVM指令集等
JVM的概念
1、 JVM 是Java Virtual Machine的简称,翻译为Java虚拟机。
2、虚拟机 ----- 指通过软件模拟的具有完成硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
3、常见的虚拟机有:
- VMWare
- Visual Box
- JVM
4、VMWare或者 Visual Box都是使用软件模拟物理CPU的指令集。
5、JVM使用软件模拟Java字节码的指令集。
JVM的规范定义:jvm主要定义了二进制class文件和JVM指令集等
1、class文件格式
2、数字的内部表示和存储
3、returnAddress数据类型定义
- 指向操作码的指针。不对应Java数据类型,不能在 运行时修改。Finally实现需要。
4、定义PC
5、堆
6、栈
7、方法区
8、整数表达式(二进制) - 原码:第一位为符号位(0为正数,1为负数)
- 反码: 符号位不动,原码取反。
- 负数补码: 符号位不动,反码加1。
- 正数补码: 和原码相同。
示例:
负数在计算机表现形式就是补码的形式了。
在程序中打印整数的二进制表示:
int a = -6;
for(int i = 0; i < 32; i ++){
int t = (a & 0x80000000 >>> i) >>>(31-i);
System.out.println(t);
}
9、为什么要用补码?
1)能很好的对0进行表示:0既不是负数也不是正数,如果把0看做正数就是00000000,如果把0看做负数,补码后的结果也是00000000
2)方便计算:如果是用补码表示整数,那么只要对应位置上的0和1相加就可以了。
10、浮点数(float 四个字节)的表示
- 支持IEEE 754标准(二进制浮点数算数标准)
1)s为1表示负数,0表示正数。
2)e为指数8位
3)m为尾数23位,如果e不全为0,实际尾数为24位。
示例:
因为e不全为0,附加位为1,所以m计算为20+0*2-1+1*2^-2+…后面都为0。单精度的-5就如下表示
11、jvm中定义了一些特殊的方法 - 类的初始化方法
- 实例的初始化方法
例如:java中没有声明一个类的构造函数,jvm会自动构造一个无参的构造方法。
12、JVM指令集 - 类型转化 ----------> l2i
- 出栈入栈操作 -------> aload astore
- 运算 ---------> iadd isub
- l流程控制 --------> ifeq ifne
- 函数调用----------> invokevirtual invokeinterface invokespecial invokestatic
13、JVM需要对Java library提供以下支持 - 反射 java.lang.reflect
- ClassLoader
- 初始化class 和interface
- 安全相关 java.security
- 多线程
- 弱引用
14、JVM的编译 - 源码到JVM指令的对应格式
- Javap
- JVM反汇编的格式
<index><opcode>[<operand1>[<operand2>]] [<comment>]
(在jvm中直接执行的是jvm的指令代码,下图右侧。)