【问题一】Jvm的体系结构:
Jdk 减 工具=jre,jre 减 类库=jvm
方法区和堆被所有线程共享的
Java栈(虚拟机栈)=白色 运行时数据区线程私有
线程私有,线程1份 2个线程 2份
虚拟机栈:存储当前线程运行方法所需的数据,指令,返回地址
包含main方法和所有运行的方法。
方法(栈帧)中包含局部变量表(this,八大基本数据类型+引用(地址 hotspot版本(句柄池) 直接指针))
栈帧包括操作数栈/动态链接(运行时的多态)/返回地址
本地方法栈native
存储当前线程运行native方法所需的数据,指令,返回地址
本地方法native 底层jvm使用C++实现的
程序计数器
当前线程正在执行的字节码指令的地址(行号)
线程私有,100个线程 虚拟机栈,本地方法栈 100份
Eg:机器cpu执行(16核)-->100个线程
GC的作用域------> 共享的区域
【问题二】常见的垃圾回收算法
- 引用计数
- 复制回收算法
- 标记清除
- 标记整理
1.引用计数法(应用:微软的COM/ActionScript/Python...)
缺点:
- 每次对对象赋值时均要维护引用计数器,且计数器本身也有一定的消耗ÿ