2.JVM运行机制 -- JVM序列
2015-07-01 12:17
357 查看
上一次写了1.初步认识JVM -- JVM序列 ,今天接着记录写JVM的运行机制。
输入java(javac)命令
装载环境以及配置(根据当前路径和系统版本寻找jvm.cfg)
根据配置寻找定位并加载JVM.DLL
初始化JVM获得JNIEnv接口
找到main方法
注意在装载环境以及配置中首先查找jre路径再装载JVM.cfg;之后定位调用系统API加载JVM.dll,至于具体的代码执行流程可以看看csdn的这篇文章更齐全。
这其中方法区一般是保存装载的类信息:类型的常量池;字段、方法信息;方法字节码(String常量在JDK1.7之后移动堆中)。
java堆应该说是和程序开发最密切相关的区域了,这保存了系统对象凡是new创建的都存储在堆中,不像栈是线程私有的,这堆是所有线程共享,特别需要留意的是GC有分代那么堆也是有分代的。
java栈上面说的是线程私有,栈的空间对于堆来说一般比较小因此存放大对象或数量多是不行的,每次调用方法都会创建一个帧并压栈随后分配栈空间,同时也会拥有一个PC寄存器保存下一条指令的地址(本地方法有区别),存在多个帧时遵循先进后出的原则,这个帧保存了方法的局部变量,操作数栈(java中不存在寄存器概念),常量池等信息,关于局部变量这里需要记住局部变量表中静态方法跟实例方法的区别,举例如下:
堆、栈、方法区交互:关于这个交互图我就直接截图了视频的这样看更清晰,如下
这次先到这里。坚持记录点点滴滴!
一、JVM启动流程
Java平台包括JVM以及Java语言,其中JVM也是运行在操作系统中的一个应用程序进程,那么也应该有自己的生命周期以及内存空间。一般情况下java或javac命令执行过程大概如下:输入java(javac)命令
装载环境以及配置(根据当前路径和系统版本寻找jvm.cfg)
根据配置寻找定位并加载JVM.DLL
初始化JVM获得JNIEnv接口
找到main方法
注意在装载环境以及配置中首先查找jre路径再装载JVM.cfg;之后定位调用系统API加载JVM.dll,至于具体的代码执行流程可以看看csdn的这篇文章更齐全。
二、JVM基本结构
这个基本结构我从网上爬了张图查看这样比较清楚,如下:这其中方法区一般是保存装载的类信息:类型的常量池;字段、方法信息;方法字节码(String常量在JDK1.7之后移动堆中)。
java堆应该说是和程序开发最密切相关的区域了,这保存了系统对象凡是new创建的都存储在堆中,不像栈是线程私有的,这堆是所有线程共享,特别需要留意的是GC有分代那么堆也是有分代的。
java栈上面说的是线程私有,栈的空间对于堆来说一般比较小因此存放大对象或数量多是不行的,每次调用方法都会创建一个帧并压栈随后分配栈空间,同时也会拥有一个PC寄存器保存下一条指令的地址(本地方法有区别),存在多个帧时遵循先进后出的原则,这个帧保存了方法的局部变量,操作数栈(java中不存在寄存器概念),常量池等信息,关于局部变量这里需要记住局部变量表中静态方法跟实例方法的区别,举例如下:
public static int runStatic(int i,long l,float f,Object o,byte b){} 局部变量表:int i,long l,float f,Object o,byte b public int runInstance(char c,short s,boolean b){} 局部变量表:reference this,char c,short s,boolean b 注意:最少4个字节32位,int:32位;float:64位;Object:32位。
堆、栈、方法区交互:关于这个交互图我就直接截图了视频的这样看更清晰,如下
这次先到这里。坚持记录点点滴滴!
相关文章推荐
- 获取checkbox复选框的值
- “413 Request Entity Too Large” 错误解决
- 在Ubuntu 11.04中执行sudo apt-get update命令时出现404错误
- Spring的编程式事务与声明式事务区别
- Cocos2d-x学习笔记(9)(CCTextFieldTTF使用输入框)
- 1.初步认识JVM -- JVM序列
- Mysql复制表格
- Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系
- OC大补之法
- JavaScript判断数组是否包含指定元素的方法
- 微信上传图片
- 在Python中marshal对象序列化的相关知识
- Qt中解决 QLabel 点击事件通过qss+focuspolicy方法实现
- iptables小总结
- SQLSERVER2008 忘记SA密码且windows账号无法登录的解决办法
- 7z在mac上的命令行
- Cheatsheet: 2015 06.01 ~ 06.30
- Windows 10还有这功能? 自动与好友分享WiFi密码
- JavaScript -- 使用JavaScript生成JSON格式的字符串
- Arc GIS engine10.2与VS2012的安装及匹配步骤