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 方法区 保存装载的类信息 类型的常量池 ...
随机推荐
- strip() 、lstrip() 、rstrip()
strip() 用于移除字符串开头和结尾的空格或换行符,如果指定参数,则表示移除指定的字符lstrip() 用于移除字符串开头的空格或换行符,如果指定参数,则表示移除指定的字符rstrip() 用于移 ...
- mysql的if null 的用法
<!-- 查询 分页查询 --> <select id="queryByPageList" resultMap="weixinActivityResul ...
- 如何在单片机上使用printf函数(printf)(avr)(stm)(lpc)(单片机)(转)
摘要: 当我们在调试代码时,通常需要将程序中的某个变量打印至PC机上,来判断我们的程序是否按预期的运行,printf函数很好的做到了这一点,它能直接以字符的方式输出变量名和变量的值,printf ...
- 关于C#我今天的六个小时
嘿嘿,今天周六啦,我们是自由学习啦,于是还记得前几天纠结的事情,还有好多不太熟悉的题目那,于是今天就找出来练习下拉,而且这些题目在老师给我们复习时间也给我们讲解过啦,这样一来应该做起来还是容易点的啦, ...
- 一次Win10安装体验
我下载的是win10 Build 14279版本.http://www.iwin10.com/xiazai/1071.html 下载之后就直接拷到U盘安装了. 安装完之后发现(因为我是分区成了两个)我 ...
- LeetCode——Palindrome Linked List
Description: Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it ...
- Fatal error Using $this when not in object context in
大致意思是 $this 没有上下文,原因是没有对此类进行实例化. 出现此错误的原因是:在FileCommand.php中使用 $this->方法/属性. $this 不是不可以用,而是要看情况用 ...
- 【BZOJ2768】[JLOI2010]冠军调查/【BZOJ1934】[Shoi2007]Vote 善意的投票 最小割
[BZOJ2768][JLOI2010]冠军调查 Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教 ...
- 【BZOJ3772】精神污染 DFS序+主席树
[BZOJ3772]精神污染 Description 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是 ...
- java如何随机生成定长的字符串
小数,字符串.时间等示例代码 String base = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 public c ...