首页 > 代码库 > JAVA虚拟机

JAVA虚拟机

 

 

1.java虚拟机是什么

  1. 抽象规范
  2. 一个具体的实现
  3. 一个运行中的虚拟机实例  

2.java虚拟机的生命周期

当启动一个java程序时时,一个虚拟机实例就诞生了,当程序中的所有非守护线程都终止时,虚拟机实例将退出

3.java虚拟机的体系结构

技术分享

 

 技术分享

技术分享

 

 4.数据类型

技术分享

5.字长

虚拟机中最基本的数据单元是字,两个字单元需持有long或double类型的值

6.类装载器子系统

用户自定义的类需派生自java.lang.ClassLoader类,每一个被装载的类型,都会被创建一个java.lang.Class实例

ClassLoader中的四个重要方法:

技术分享

7.方法区

技术分享

还存储:

  1. 常量池
  2. 字段信息
  3. 方法信息
  4. 类静态变量
  5. 一个到ClassLoader的引用
  6. 一个到Class实例的引用:Class类中的方法技术分享,获得Class的方式:Class.forName(String className);对象的getclass()方法

     

  7. 方法表

8.堆

堆空间设计的两种方式:

技术分享

第一种对象移动方便,但需要进行两次指针传递;第二种只需要一个指针,但是移动对象时需要更新整个运行时数据区中指向对象的引用

方法表:

技术分享

此外,堆上还负责存储对象锁,等待集合

数组在堆上的表示:

技术分享

9.程序计数器

10.栈

栈帧由三部分组成:

  1. 局部变量区:方法对应的参数和局部变量
  2. 操作数栈技术分享

     

  3. 帧数据区:支持常量池解析,正常方法返回,异常派发数据

 栈的生长方式:

技术分享

 

技术分享

技术分享

 

JAVA虚拟机