《jvm学习笔记》JVM初识
运行时数据
帧栈
虚拟机启动
虚拟机指令集
整数的表达
原码:第一位为符号位(0为正数,1为负数)
反码:符号位不变,,原码取反
负数补码:符号位不变,,反码加1
正数补码:和原码相同
打印数字的二进制表示形式
//整数有32位 int a = -6;
//0x80000000
//11111111111111111111111111111010
//01000000000000000000000000000000
//1
for (int i = 0; i < 32; i++) {
int t = (a & 0x80000000 >>> i) >>> (31 - i);
System.out.print(t);
}
- 补码 :没有歧义的表示0 、很好的参与运算
浮点数表示
IEEE 754
s eeeeeeee mmmmmmmmmmmmmmmmmmmm
第一位是符号位 :s
紧接着八位表示指数位:e
剩余23位表示尾数: m
如果e全0 尾数附加位为0 否则为1
sm2^(e-127)
jvm启动流程
1.装载配置。根据当前路径和系统版本寻找jvm.cfg
2.根据配置寻找jvm.dll
3.初始化jvm获得JNIEnv接口。findClass等操作通过它实现
4.运行main方法
jvm基本结构
PC寄存器
每一个线程拥有一个PC寄存器
在线程创建时 创建
指向下一条指令的地址
执行本地方法时,PC的值为undefined
方法区
保存装载的类信息
类型常量池
字段、方法
方法字节码
通常和永久区 Perm(相对静止、相对稳定的数据)关联在一起
堆
对象保存在堆中
所有线程共享java堆
栈
线程私有
栈由一系列帧组成(帧栈)
栈保存一个方法的局部变量、操作数栈、常量池指针
每一个方法调用创建一个帧,并压栈
栈上分配
小对象,没有逃逸的情况下,可直接分配在栈上
直接分配在栈上,可以自动回收,减轻GC压力
对象或者逃逸对象无法栈上分配
内存模型
每一个线程有一个工作内存和主存独立
工作内存存放主存中变量的值的拷贝
- volatile不能代替锁
以上是 《jvm学习笔记》JVM初识 的全部内容, 来源链接: utcz.com/z/513109.html