2.JVM运行机制 -- JVM序列
上一次写了1.初步认识JVM -- JVM序列,今天接着记录写JVM的运行机制。
一、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位。
堆、栈、方法区交互:关于这个交互图我就直接截图了视频的这样看更清晰,如下

这次先到这里。坚持记录点点滴滴!
2.JVM运行机制 -- JVM序列的更多相关文章
- 02. JVM运行机制
JVM运行机制 JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程
- 深入解析java虚拟机-jvm运行机制
转自oschina 一:JVM基础概念 JVM(Java虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现.编译虚拟机的指令集与编译微处理器的指令集非常类似.Java虚拟机包括一套字 ...
- jvm运行机制与内存管理
http://blog.csdn.net/lengyuhong/article/details/5953544 http://www.cnblogs.com/nexiyi/p/java_memory_ ...
- JVM运行机制(非原创)
文章大纲 JVM基本概念 JVM的体系结构 JVM启动流程 一.JVM基本概念 Java虚拟机(JVM)是可运行Java代码的假想计算机 Java虚拟机包括类加载器.一组寄存器.方法区.一个垃圾回收堆 ...
- 探讨JVM运行机制和执行流程
JVM是什么 概述 JVM是Java Virtual Machine的缩写.它是一种基于计算设备的规范,是一台虚拟机,即虚构的计算机. JVM屏蔽了具体操作系统平台的信息(显然,就像是我们在电脑上开了 ...
- JVM运行机制
JVM启动流程
- Java Jvm运行机制原理
一:简介 在学习Java虚拟机之前,也就是Jvm之前,我想大家能够带着问题去学习,这样的话,大家学习起来也会比较有所获! 1.Java虚拟机(Jvm)是什么? 2.Java虚拟机是用来干什么的? 3. ...
- JVM内核-原理、诊断与优化学习笔记(二):JVM运行机制
文章目录 JVM启动流程 PC寄存器 方法区 保存装载的类信息 通常和永久区(Perm)关联在一起 Java堆 Java栈 Java栈 – 局部变量表 ** 包含参数和局部变量 ** Java栈 – ...
- 深入JVM内核--JVM运行机制
JVM启动流程 JVM基本结构 PC寄存器 每个线程拥有一个PC寄存器 在线程创建时 创建 指向下一条指令的地址 执行本地方法时,PC的值为undefined 方法区 保存装载的类信息 类型的常量池 ...
随机推荐
- 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第四节:3D公告板
<使用Cocos2d-x 开发3D游戏>系列在线课程 第四节:3D公告板 视频地址:http://edu.csdn.net/course/attend/1330/20804 交流论坛:mo ...
- Java 类设计----Java类的继承
Java类的继承 为描述和处理个人信息,定义类Person: public class Person { public String name; public inat age; public Dat ...
- VS2015编译TIFF3.8.0源码
没有CMakeLists.txt,不能使用CMake GUI了.源文件中有makefile.vc,所以使用nmake 进入VS2015命令行 nmake -f makefile.vc 修改nmake. ...
- View的setTag()与getTag()方法使用
通常我们是用findViewById()方法来取得我们要使用的View控件,不过除了这一种方法之处 ,我们还可以用View中的setTag(Onbect)给View添加一个格外的数据,再用getTag ...
- Ubuntu13.10:[3]如何开启SSH SERVER服务
作为最新版本的UBUNTU系统而言,开源,升级全部都不在话下.传说XP已经停止补丁更新了,使用UBUNTU也是一个很好的选择.ubuntu默认安装完成后只有ssh-agent(客户端模式),宾哥百度经 ...
- 关于“ORA-01747: user.table.column, table.column 或列说明无效”的报错。
今天在工程中遇到“ORA-01747: user.table.column, table.column 或列说明无效”的报错情况,查了一下是由于数据库列名起的不好引起的,名字用到了数据库的关键字.
- 【PHP】算法进阶,获取给定值的最优组合:虚拟币抵扣问题解决方案
商城里边.虚拟币抵扣问题解决方案 虚拟币抵扣规则,按照以下规则执行: 1.如果一个订单包含多款商品,且均支持虚拟币抵扣时: 优先按照最大化使用虚拟币进行全额抵扣原则进行抵扣,若抵扣后用户虚拟币账号 ...
- centos7 ubuntu14 添加sudo 权限 ,禁用每次sudo 需要输入密码
安装完centos7后,默认没有启用sudo,首先应该是对sudo进行设置.sudo的作用就是使当前非root用户在使用没有权限的命令 时,直接在命令前加入sudo,在输入自己当前用户的密码就可以完成 ...
- 微信小游戏 Egret开发数据域官方Demo下载地址
随着引擎的升级,伴随而来就是各种问题,使用官方调试过的Demo,少走弯路. Mark下 官方Demo
- OC开发_Storyboard——视图控制生命周期以及NSNotifications
一.生命周期 1.ViewDidLoad: 一般的初始化,除了几何图形的初始化(这个时候还没确定) 2.ViewWillAppear: 代表你的视图将要在屏幕上显示,可能会调用多次,对不可见时可能能改 ...