java虚拟机
2015-06-11 11:47
591 查看
本文转自 http://blog.csdn.net/maerdym/article/details/8067568
java程序能运行,要求java虚拟机能识别java编译后的class文件,并对文件进行解析,然后载入到内存中,还需要有个执行引擎来执行载入到内存中的指令和数据。
java虚拟器用类装载器子系统来装载class文件。java虚拟机的数据存放区一般包含方法区、堆、java栈、PC寄存器和本地方法栈,但不同的java虚拟机实现,对数据存放区的管理可能是不一样的,java虚拟机规范并没有对其结构进行规定。执行引擎从数据存放区获取指令和数据,并将运算的结构存回数据存放区。
数据存放区的一种实现结构如下:
类装载器装载class文件后,将class内包含的类型信息存储到方法区中,在java运行运行实例,所创建的java对象将会存储在堆中。下图表示名为org.simple.Animal类载入后的的存放方式:
当java程序运行时,java虚拟机会为运行的每个线程分配一个java栈和PC寄存器。当线程的一个方法运行时,java虚拟机会将该方法的运行数据压入到java栈中,该份运行数据被称为java栈帧。
上图描述了莫线程执行Max函数时java栈的变化情况,当调用Max函数时,java虚拟机会将Max函数的参数、局部变量等信息当做一个栈帧压入java栈中;在Max函数中调用了Compare方法,因此又将Compare方法的数据压入到java栈中,当Compare函数执行完毕后,会将Compare函数栈帧弹出java栈并继续运行Max方法,Max方法运行完毕后,Max方法的栈帧也将会被弹出java栈。
本地方法栈用于存储java程序调用本地方法时,本地方法的状态。本地方法栈因虚拟机的实现不同而不同。
本文转自 http://blog.csdn.net/maerdym/article/details/8067568
java程序能运行,要求java虚拟机能识别java编译后的class文件,并对文件进行解析,然后载入到内存中,还需要有个执行引擎来执行载入到内存中的指令和数据。
java虚拟器用类装载器子系统来装载class文件。java虚拟机的数据存放区一般包含方法区、堆、java栈、PC寄存器和本地方法栈,但不同的java虚拟机实现,对数据存放区的管理可能是不一样的,java虚拟机规范并没有对其结构进行规定。执行引擎从数据存放区获取指令和数据,并将运算的结构存回数据存放区。
数据存放区的一种实现结构如下:
类装载器装载class文件后,将class内包含的类型信息存储到方法区中,在java运行运行实例,所创建的java对象将会存储在堆中。下图表示名为org.simple.Animal类载入后的的存放方式:
当java程序运行时,java虚拟机会为运行的每个线程分配一个java栈和PC寄存器。当线程的一个方法运行时,java虚拟机会将该方法的运行数据压入到java栈中,该份运行数据被称为java栈帧。
上图描述了莫线程执行Max函数时java栈的变化情况,当调用Max函数时,java虚拟机会将Max函数的参数、局部变量等信息当做一个栈帧压入java栈中;在Max函数中调用了Compare方法,因此又将Compare方法的数据压入到java栈中,当Compare函数执行完毕后,会将Compare函数栈帧弹出java栈并继续运行Max方法,Max方法运行完毕后,Max方法的栈帧也将会被弹出java栈。
本地方法栈用于存储java程序调用本地方法时,本地方法的状态。本地方法栈因虚拟机的实现不同而不同。
相关文章推荐
- AdaBoost的java实现
- 【转载】eclipse调试arm裸机程序
- java处理json的工具类
- Struts2中动态方法调用
- Java多线程系列--“JUC锁”01之 框架
- 运用spring task定时器发布定时任务
- java中Arrays类
- Java String.Format() 方法及参数说明
- Mac下的eclipse中svn插件使用代理
- 整合hibernate4.2和spring框架,出现No Session found for current threa报错
- Java模式(适配器型号)
- Shiro配置---基于spring框架
- Java位运算符
- struts2配置详解
- JAVA 中两种判断输入的是否是数字的方法
- mark:Eclipse导入workspace存在的项目
- 编译Hadoop-Eclipse插件
- Spring + JdbcTemplate + JdbcDaoSupport + HibernateDaoSupport examples
- java基础学习步骤
- 【深入JAVA】cglib动态代理