JAVA虚拟机
1.java虚拟机是什么
- 抽象规范
- 一个具体的实现
- 一个运行中的虚拟机实例
2.java虚拟机的生命周期
当启动一个java程序时时,一个虚拟机实例就诞生了,当程序中的所有非守护线程都终止时,虚拟机实例将退出
3.java虚拟机的体系结构
4.数据类型
5.字长
虚拟机中最基本的数据单元是字,两个字单元需持有long或double类型的值
6.类装载器子系统
用户自定义的类需派生自java.lang.ClassLoader类,每一个被装载的类型,都会被创建一个java.lang.Class实例
ClassLoader中的四个重要方法:
7.方法区
还存储:
- 常量池
- 字段信息
- 方法信息
- 类静态变量
- 一个到ClassLoader的引用
- 一个到Class实例的引用:Class类中的方法,获得Class的方式:Class.forName(String className);对象的getclass()方法
- 方法表
8.堆
堆空间设计的两种方式:
第一种对象移动方便,但需要进行两次指针传递;第二种只需要一个指针,但是移动对象时需要更新整个运行时数据区中指向对象的引用
方法表:
此外,堆上还负责存储对象锁,等待集合
数组在堆上的表示:
9.程序计数器
10.栈
栈帧由三部分组成:
- 局部变量区:方法对应的参数和局部变量
- 操作数栈
- 帧数据区:支持常量池解析,正常方法返回,异常派发数据
栈的生长方式: