------------恢复内容开始------------

把文件编译成字节码文件的叫编译器的前端,

线程共享的方法去和堆,非线程共享的:java虚拟机栈,本地方法栈,还有程序计数器 都是每个线程独有一份的

执行引擎叫做编译器的后端

执行引擎,分为解释器,jit即时编译器,以及垃圾回收器这三部分包含在执行引擎当中

当字节码文件加载到内存中下一步要开始解释运行了,解释运行用到的就是解释器

当存在反复执行的热点代码的时候就用到jit的即时编译器

两次编译,第一次编译成字节码文件,第二次编译的时候把反复执行的热点代码通过jit编译器编译成机器指令,同时缓存起来放在方法区,提高虚拟机性能

根据栈的方式和寄存器的方式

int i = 2+3; 编译之后直接2+3

int i =2;

int j =3;

int z = i + j;

字节码文件如下  定义了一个常量2 , istore_1 就是操作数栈的索引位置 ,保存到1的操作数栈当中,

定义3,保存到索引2当中,

然后把i和j加载进来,进行求和的操作

类的加载器分为引导类加载器,扩展类加载器,系统类加载器

运行中输入jps可以查看运行中的程序的进程号

runntime 运行时类 ,饿汉式 单例

  获取到当前的唯一的实例,将当前的进程结束掉

主流的解释器和即时编译器都需要有

for循环如果没有jit即使编译器每次循环都要逐行解释,而有了jit即时编译器可以把热点代码即时编译

栈可知内存地址,减少开销

最重要的虚拟机,hotspot

类加载子系统  加载->链接->初始化  同时加载需要用到的加载器,引导类加载器,扩展类加载器,还有系统类加载器,

linking 分为 验证,准备,解析

初始化,涉及到静态变量的现实初始化

运行时数据区  每一个线程一份程序计数器

  栈就是虚拟机栈 stack frame 栈帧;  LV局部变量表, OS操作数栈 DL动态链接 RA方法返回地址(栈帧具体的细节)

而什么是栈帧(Stack Frame)呢?

每一次函数的调用,都会在调用栈(call stack)上维护一个独立的栈帧(stack frame).每个独立的栈帧一般包括:

  • 函数的返回地址和参数
  • 临时变量: 包括函数的非静态局部变量以及编译器自动生成的其他临时变量
  • 函数调用的上下文

    栈是从高地址向低地址延伸,一个函数的栈帧用ebp 和 esp 这两个寄存器来划定范围.ebp 指向当前的栈帧的底部,esp 始终指向栈帧的顶部;

    ebp 寄存器又被称为帧指针(Frame Pointer);

    esp 寄存器又被称为栈指针(Stack Pointer);

jvm运行过程的更多相关文章

  1. JVM核心之JVM运行和类加载全过程

    为什么研究类加载全过程? 有助于连接JVM运行过程 更深入了解java动态性(解热部署,动态加载),提高程序的灵活性 类加载机制 JVM把class文件加载到内存,并对数据进行校验.解析和初始化,最终 ...

  2. Java程序员必了解的JVM原理以及虚拟机的运行过程

    JVM概念 虚拟机:指以软件的方式模拟具有完整硬件,VM概念 虚拟机:指以软件的方式模拟具有完整硬件系统功能.运行在一个完全隔离环境中的完整计算机系统 ,是物理机的软件实现.常用的虚拟机有VMWare ...

  3. JVM运行时数据区及对象在内存中初始化的过程

    JVM运行时数据区 Java虚拟机所管理的内存区域,也称为运行时数据区,分为以下几个运行时数据区,如图所示 程序计数器:当前程序所执行字节码的行号指示器 程序计数器(Program Counter R ...

  4. JAVA - JAVA编译运行过程

    Java编译原理 *.java→*.class→机器码 java编译器 (编译) → 虚拟机(解释执行) →  解释器(翻译) → 机器码 1.Java编译过程与c/c++编译过程不同 Java编译程 ...

  5. 基础知识《零》---Java程序运行机制及运行过程

    Java运行机制 Java虚拟机(Java Virtual Machine):Java虚拟机可以理解成一个以字节码为机器指令的CPU:对于不同的运行平台,有不同的虚拟机:Java虚拟机机制屏蔽了底层运 ...

  6. Java(JVM运行时)各种内存区域详解及扩展

    本文整理于  Java内存与垃圾回收调优 Java 堆内存 从几个sample来学习Java堆,方法区,Java栈和本地方法栈 首先来一张图让我们理清楚java运行时状态: 诚然,如上图所示:java ...

  7. JVM 运行时内存结构

      1.JVM内存模型       JVM运行时内存=共享内存区+线程内存区 1).共享内存区       共享内存区=持久带+堆       持久带=方法区+其他       堆=Old Space ...

  8. JVM运行时内存结构

    原文转载自:http://my.oschina.net/sunchp/blog/369707 1.JVM内存模型 JVM运行时内存=共享内存区+线程内存区 1).共享内存区 共享内存区=持久带+堆 持 ...

  9. java入门(1) 程序运行机制及运行过程

    首先我们来看一下java程序在底层是怎么工作的: JAVA有两种核心机制: Java虚拟机(Java Virtual Machine): 1.java虚拟机可以理解成一个以字节码为机器指令的CPU. ...

随机推荐

  1. SpringMVC学习02(我的第一个SpringMVC程序)

    2.Hello,SpringMVC 2.1 配置版 1.新建一个Moudle , springmvc-02-hello , 添加web的支持! 2.确定导入了SpringMVC 的依赖! 3.配置we ...

  2. JmoVxia

    关于我 网名:季末微夏 英文:JmoVxia 签名:路漫漫其修远兮,吾将上下而求索 标签:iOS开发(ma)工程师(nong).技术爱好者 联系我 邮箱:JmoVxia@gmail.com Githu ...

  3. IDE快捷键的使用

    ctrl+ait+l,整理代码 ctrl+atl+v,生成等号左边的类型和变量 shift+方向键,选择内容 ctrl+方向键,自己领悟.常常与shift同时使用 ctrl+alt+方向键,光标前进或 ...

  4. 题解 Omeed

    传送门 差了一点没想到正解-- 首先单次询问的 \(O(n)\) 写法很好想,考虑如何优化 首先基础分区间求和即可 然后那个连击分的话,是一个关于 \(f_i\) 和 \(f_{i-1}\) 的柿子 ...

  5. 题解 God Knows

    传送门 这里有个线段树维护单调栈的神仙技巧 同机房dalao @Yubai的不同理解方式 yysy,我考场上连\(n^2\)的暴力都没搞出来 这里实际上求的是最小权极大上升子序列 但这个跟题目几乎没什 ...

  6. 十六:使用JDBC对数据库进行CRUD

    一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的exe ...

  7. mfc HackerTools远程线程注入

    在一个进程中,调用CreateThread或CreateRemoteThreadEx函数,在另一个进程内创建一个线程(因为不在同一个进程中,所以叫做远程线程).创建的线程一般为Windows API函 ...

  8. 深入浅出Mybatis系列(七)---TypeHandler简介

    无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成 Java 类型.Mybatis默认 ...

  9. 【转】SpringCloud学习

    Spring Cloud Alibaba与Spring Boot.Spring Cloud之间不得不说的版本关系   这篇博文是临时增加出来的内容,主要是由于最近连载<Spring Cloud ...

  10. 老鼠走迷宫II

    转自:http://blog.csdn.net/holymaple/article/details/8636234 由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不止一条,如何求出所有的路径呢? 解法 ...