java虚拟机

来源:互联网 发布:淘宝投诉号码 编辑:程序博客网 时间:2024/06/06 03:55
 

 

虚拟机是什么

1)抽象规范

2)具体实现

3)运行中的虚拟机实例

 

虚拟机体系结构

类装载器子系统,运行时数据区,执行引擎。

运行时数据区包括  方法区,堆,Java栈,PC寄存器,本地方法栈 。

其中java栈是线程独享的,每个java栈由栈帧组成,存储线程中java方法的调用状态,包括局部变量,被调用时传进来的参数,返回值,以及运算的中间结果。

java虚拟机没有寄存器。其指令集使用java栈存储中间数据。这样是为了其指令集尽量紧凑。

 

数据类型:基本类型和引用类型,基本类型变量都有初始值,而引用类型的变量持有初始值

用户自定义的类装载器以及Class类的实例都放在内存中的堆区,而装载的类型信息则都位于方法区。

 

装载连接以及初始化

1)装载-------- 查找并装载类型的二进制数据

2)连接--------执行验证,准备,以及解析(可选)

3)初始化------把类变量初始化为正确的初始化值

在Class。forName中知执行操作后以上3不都要进行,而用.class方法 则第三布在特定情况下才执行,具体见java编程思想、14章。

启动类加载器 在系统的类的安装路径中查找要装入的类  系统类加载器搜索classpath目录

 

 

方法区

虚拟机提取class文件的类型信息,并把它存入方法区中

 

注意常量池

所有常量的集合 包括直接常量,和对其他类型。字段和方法的引用。

 

 

把堆分为两部分

句柄池,常量池。 虚拟机中每个对象都有对象锁,用于协调多个线程的同步。其上的wait notify notifyAll 方法。

java中数组是真正的对象,存于数组中。同一维度的素组都是同一类的实例,不管其长度。

 

 

java栈

每个线程独享一个java栈,栈有栈帧组成,栈不要求内存连续分配。

栈帧由:局部变量区,操作数栈和帧数据区。

类型为int,float,reference,returnAddress 的值在数组中占一项,long和double 两项 ,byte,short,char 转换为int。

 

 

执行引擎

java虚拟机规范定义了规则:所有基本类型除了long 和double 都必须是原子级的。

原创粉丝点击