JVM概念
JVM是Java Virtual Machine 的简称,意为Java虚拟机
虚拟机
指通过软件模拟的具有完整硬件系统功能的,运行在一个完全隔离环境中的完整计算机系统
有哪些虚拟机
VMWare
Visual Box
JVM
VMWare 或者 Visual Box都是使用软件模拟物理CPU的指令集
JVM 使用软件模拟Java字节码的指令集
Java语言规范
语法
ex: if (Expression) Statement
词法结构
\u + 4个16进制数字,表示UTF-16
行终结符: CR, LF, CR LF
空白符: 空格 \t 、\f
注释
标识符
关键词
变量
元类型: byte,short,int,long,float,char
变量初始化: boolean: false, char : \u0000
泛型
类型
文法
java内存模型
类加载链接的过程
public static final abstract的定义
异常
数组的使用
。。。
JVM规范
- Class文件类型
- 运行时数据
- 帧栈
- 虚拟机的启动
虚拟机的指令集
Java 语言规范规定了什么是Java语言
Java语言和JVM相对独立
Groovy
Clojure
Scala
这些语言都可以运行在JVM上,但他并不是javaJVM主要定义二进制class文件和JVM指令集等
JAVA规范定义的主要内容
Class文件格式
数字的内部表示和存储
return Address 数据类型定义
- 执行操作码的操作,不对应Java数据类型,不能再运行时修改
定义PC
堆
栈
方法区
整数的表达:
原码: 第一位为符号位 (0为正数,1为负数)
反码:符号位不懂,原码取反
负数补码:符号位不动,反码加1
正数补码:和原码相同
打印正数的二进制的代码展示
int a = -6;
for (int i = 0; i < 32; i++){
int t = (a & 0x80000000 >>> i) >>> (32 - i);
System.out.println(t);
}
为什么要用补码?
计算0的表示
0 既是正数,也是负数
所以用补码可以让0正确表示
其次,用补码可以很好的参与计算机中二进制的计算
Float的表示与定义
- 支持 IEEE 754
JVM指令集
类型转化
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反汇编的格式
< index> < opcode> [< operad1>< operand2>...] [< comment>]