2019独角兽企业重金招聘Python工程师标准>>>

本文摘自: http://blog.163.com/guixl_001/blog/static/41764104201082961141664/,并稍加整理。

package demo;public class Volcano {public static void main(String[] args) {Lava lava = new Lava();lava.flow();}
}class Lava {private int speed = 5;void flow() {speed++;System.out.println(speed);}
}

下面我们描述一下main()方法的第一条指令的字节码是如何被执行 的。不同的JVM有不同的实现,这只是其中的一种实现。

为了运行这个程序,我们会以某种方式把“demo.Volcano"传给JVM,JVM找到并读取这个类文件;它从类文件提取类型信息并写入方法区,通过解析方法区中的字节码激活main()方法。 在执行时,JVM保持了一个指向当前类Volcano的常量池的指针。

注意,JVM在还没有加载Lava类的时候就已经开始执行了。正像大多数的 JVM一样,不是等所有类都加载了以后才开始执行,而是只会在需要的时候做加载。

main()的第一条指令告知JVM对位于常量池中第一项的类做初始化:JVM通过指向Volcano常量池的指针找到第一项,发现是一个对Lava类的符号引用,然后它就检查方法区看Lava类是否已被加载。

这个符号引用就是类Lava类的完整有效名“demo.Lava”, 当JVM发现还没有加载过名称为“demo.Lava”的类,它就开始查找并加载类文件"demo.Lava.class",从类文件中抽取类型信息并写入方法区。

然后,JVM以一个直接指向方法区Lava类的指针替换了常量池第一项的符号引用,之后就可以用这个指针快速的找到Lava类了。而这个替换过程也称为常量池解析(constant pool resolution)。

终于,JVM开始为新的Lava对象分配空间了:JVM通过指向Lava类的指针(刚才指向volcano常量池第一项的指针)得到一个Lava对象究竟需要多少空间。 一旦JVM知道了一个Lava对象所要的空间,它就在堆上分配这个空间并为实例变量初始化正确的值。

当把新生成的Lava对象的引用压到栈中,第一条指令也结束了。下面的指令会用这个引用激活Lava对象的flow()方法。

转载于:https://my.oschina.net/HuQingmiao/blog/683615

JVM第三篇 — JVM是怎么工作的?相关推荐

  1. 【JVM】四、JVM优化-GC调优

    传送门 [JVM]一.JVM体系结构 [JVM]二.JVM垃圾收集器 [JVM]三.JVM内存溢出问题分析查看 [JVM]四.JVM优化-GC调优 上一篇:[JVM]三.JVM内存溢出问题分析查看 文 ...

  2. 我的职业理想 有关计算机应用300字,我的理想职业作文300字三篇

    我的理想职业作文300字三篇 在学习.工作或生活中,大家都不可避免地会接触到作文吧,根据写作命题的特点,作文可以分为命题作文和非命题作文.相信很多朋友都对写作文感到非常苦恼吧,以下是小编整理的我的理想 ...

  3. 未来的计算机300,【精选】未来在电脑在作文300字三篇

    [精选]未来在电脑在作文300字三篇 在学习.工作乃至生活中,大家都写过作文,肯定对各类作文都很熟悉吧,写作文可以锻炼我们的独处习惯,让自己的心静下来,思考自己未来的方向.怎么写作文才能避免踩雷呢?以 ...

  4. 学校计算机老师关心学生的作文600字,【热门】学校学生作文600字三篇

    [热门]学校学生作文600字三篇 在学习.工作乃至生活中,大家对作文都不陌生吧,写作文是培养人们的观察力.联想力.想象力.思考力和记忆力的重要手段.那么你有了解过作文吗?以下是小编帮大家整理的学校学生 ...

  5. 资料搜集-JAVA系统的梳理知识5-JAVA基础篇JVM

    <!-- TOC -->- [Collections 工具类和 Arrays 工具类常见方法](#collections-工具类和-arrays-工具类常见方法)- [Collection ...

  6. 第七篇:双管齐下,JVM内部优化与JVM性能调优

    文章目录 一.前言 二.编译时优化 2.1 Javac编译器 2.2 Java语法糖 2.2.1 泛型和泛型擦除 2.2.2 自动装箱.自动拆箱.遍历循环 2.2.3 条件编译 三.运行时优化(核心: ...

  7. Java提高篇——JVM加载class文件的原理机制

    阅读目录 1.JVM 简介 2.JVM 的组成部分 3.JVM加载class文件的原理机制 在面试java工程师的时候,这道题经常被问到,故需特别注意. 回到顶部 1.JVM 简介 JVM 是我们Ja ...

  8. JVM学习(三)JVM内存模型

    引言 本文希望以另外一种维度的思考方式来学习JVM内存模型,希望自己能从设计原理的维度考虑为什么存在?有什么价值?解决什么问题? 在学习JVM内存模型之前,先回顾下前面两章的内容点类加载器机制与类加载 ...

  9. 深入理解JVM虚拟机13:JVM面试题,看这篇就足够了(87题详解)

    1.java中会存在内存泄漏吗,请简单描述. 会.自己实现堆载的数据结构时有可能会出现内存泄露,可参看effective java. 2.64 位 JVM 中,int 的长度是多数? Java 中,in ...

最新文章

  1. PTA基础编程题目集-7-1 厘米换算英尺英寸
  2. python 同时遍历两个列表并组成一个字典
  3. python编程零基础免费网课-Python网课推荐——免费学习Python编程
  4. 针对Oracle的10G版本提升SCOTT为DBA脚本!
  5. html语言中括号怎么打,HTML语言中括号(尖括号)的字符编码
  6. 开放下载!《DTS控制台入门一本通》
  7. 在Silverlight+WCF中应用以角色为基础的安全模式(一)基础篇之角色为基础的安全模式简介...
  8. xss跨站脚本攻击_网络安全xss跨站脚本攻击原理
  9. error while loading shared libraries: xxx.so.x错误
  10. docker 中 安装 openssh-server
  11. matlab2014a vs2015,Matlab2014a使用VS2015混合编译
  12. 黑链-最高明的网站隐藏链接方法
  13. jdbc处理银行转账事务
  14. 【随笔】理性国度的感性之火——浅论《报任安书》
  15. 假设有一个英文文本文件,编写程序读取其内容,并将其中的大写字母变为小写字母,小写字母变为大写字母。...
  16. Operators(操作符)(创建、转换操作符)
  17. va start linux头文件,va_start/va_end函数-linux
  18. 笔记:毫米波雷达传感器,优势、应用和产业规模
  19. 各种压缩格式介绍!(摘录2)
  20. 第一句超浪漫,第二句超不浪漫

热门文章

  1. java多线程学习三
  2. Autodesk 产品二次开发技术研讨会将在上海广州北京相继举行
  3. 本地实现ES6转ES5代码——gulpfile配置文件
  4. Java多线程之阻塞I/O如何中断
  5. 用Node.js 写web框架(番外)
  6. IT菜鸟,希望大家赐教
  7. 不改一行代码定位线上性能问题
  8. 面试题6--利用前序和中序遍历重构二叉树--递归方法
  9. Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等 (转载)
  10. springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】