`
syyixin
  • 浏览: 35924 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java基础之JVM运行机制

    博客分类:
  • Java
 
阅读更多

 

 

Java基础之JVM运行机制

 

作者:忆辛

 

Java Virtual Machine简称JVM,它是一种规范,是一种计算的仿真。我们知道java语言是跨平台的,而JVMjava跨平台的关键之所在。JVM上执行java字节码,执行时这些字节码可以解释成具体平台的机器码,因此java拥有“一次编译,处处运行”这一跨平台能力。

 

     JVM运行机制和物理结构可以参考以下两张图所示:



 

    


从上面我们可以看出java运行主要分几个步骤:

 

一、java源码编译。

 

二、类加载。

 

三、类执行。

 

 

步骤一:编译

 

java代码编译成字节码是类加载前的一个必要步骤,那么Java源码编译过程究竟是怎样的呢?我们先看下面的一张图:

 

    

 

 

     输入是java源代码,输出是JVM上可运行的字节码,而上图中的符号表主要是存贮和标识符有关的Token信息。这个编译过程分三个阶段:分析与输入到符号表、注解处理、语义分析与生成字节码文件,其流程请参考下图:

 

    

 

 

     最后生成的字节码文件中包含结构信息、元数据、方法信息。

 

1、结构信息:class文件格式版本号和各部分的数量与大小信息。

 

2、元数据:指Java源码中声明与常量的信息,包含类/继承的超类/实现的接口等声明信息、域与方法声明信息、常量池。

 

3、方法信息:对应Java源码中语句和表达式对应的信息,包含字节码、异常处理器表、求值栈的类型记录、调试符号信息、求值栈与局部变量区大小。

 

 

 

步骤二:加载

 

     我们知道,java类必须加载到JVM中才能运行,这个工作由类加载器完成,这个实际上就是把.class文件从硬盘读到内存里。其实类加载器也是一个类,名字叫bootstrap classloaderjava运行需要的所有类(jre/lib/rt.jar)都是由它加载。该类由c++语言编写,可以独立运行,是JVM运行的起点。类的加载可通过两种方式实现,第一种是显式加载,另一种则是隐式加载。

 

  1. 显式加载。

 

显式加载类的实施方式比较多,比如加载类Demo,我们可以使用Class类的forName方法进行加载,即Class.forName(“Demo”);这个语句是简写形式,完整写法是Class.forName(“Demo”,true,this.getClass().getClassLoader());当然,java程序员对程序控制权的迷恋向来很深,你大可以自己定义一个加载类。方法如下:

 

public class CustomClassLoader extends URLClassLoader{

 

public CustomClassLoader(){

 

super(new URL[0]);

 

}

 

}

 

         CustomClassLoader classLoader=new CustomClassLoader();

 

         classLoader.loadClass(“Demo”);

 

     这里CustomClassLoader继承了JDK中核心包中的类加载器。

 

  1. 隐式加载。

    其实我们很少去显式加载。

    Demo demo=new Demo();

 

程序运行到这句代码发现内存里还没有Demo类,这时候JVM就会请求加载当前类的类加载器来加载该类。这里需要注意的是只有该句代码的确能有效执行时才会去加载对应类,否则是不会加载的,这样做的目的是尽可能少地加载类,减少内存资源的开销。

 

加载类是一种树状结构,加载时首先要从叶子节点往根部检查,检查类是否已经被加载,如果检查到某个classLoader已加载则视为已加载此类。为保证此类所有classLoader加载一次,加载类会从根往叶子节点逐级加载此类。具体检查和加载顺序如下图所示:



 

 

 

     步骤三:执行

 

字节码加载到JVM后执行,具体执行步骤我们可以参考下图:

 



 

我们知道,JVM是基于栈的体系结构来执行JVM字节码的。具体来说先创建线程,产生程序计数器(PC)和栈(Stack)。其中程序计数器存放下一条要执行的指令在方法内的偏移量,栈中则存放一个个栈帧,每个栈帧对应每个方法的每次调用;另外栈帧是由局部变量区和操作数栈两个部分组成,局部变量区用于存放方法中的局部变量和参数,操作数栈用于存放方法执行过程中所产生的中间结果。

 

 

 

作者:忆辛,写于羊城,于20150205 1057分发表在ITeye网站,任何单位和个人未经作者书面许可,禁止转载、复制本文全文或文章的任何部分。

 

 

 

  • 大小: 17.5 KB
  • 大小: 20.1 KB
  • 大小: 24.9 KB
  • 大小: 18.1 KB
  • 大小: 41.6 KB
  • 大小: 33.9 KB
4
3
分享到:
评论
7 楼 raph_java 2015-02-09  
楼主可以继续写成一个系列
6 楼 programmer- 2015-02-06  
5 楼 string2020 2015-02-06  
MAT怎么用
楼主能否出一个视频教程
4 楼 moonyang 2015-02-06  
有用,感谢
3 楼 jwell 2015-02-06  
2 楼 1927105 2015-02-06  
1 楼 beck5859509 2015-02-05  

相关推荐

    JVM运行机制深入分析

    JVM运行机制深入分析,适用于研究java开发的人员,想深入理解jvm

    JVM的运行机制

    JVM 运行机制。

    Java零基础学习资料-Java(JVM)虚拟机运行机制

    Java零基础学习资料

    深入JVM内核—原理、诊断与优化视频教程-2.JVM运行机制

    深入JVM内核—原理、诊断与优化视频教程 深入JVM内核—原理、诊断与优化视频教程

    Java JVM虚拟机运行机制

    JVM(Java虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现。接下来通过本文给大家简单介绍Java JVM虚拟机运行机制,感兴趣的朋友一起看看吧

    Java知识,JVM面试资料

    JVM(Java虚拟机)是Java平台的核心组件之一,它是一个在计算机上运行Java字节码的虚拟机。JVM 提供了Java程序运行的环境和基础设施,并且具有高度的可移植性和跨平台性。 JVM 的主要功能包括字节码解释和执行、...

    JVM虚拟机机制 教学

    深度解析java虚拟机内幕,jvm的运行机制,处理机制

    初步理解:jvm运行机制,java程序运行机制,堆栈详解,jvm调优的目的。

    谷咕咕最近在准备面试,本来想多看看堆和栈的关系,看看发现又设计到gc(Garbage Collection)垃圾回收机制,发现盲区太多了,就去粗略的学习了一下jvm(java虚拟机),发现之前只会写程序,底层的东西真是太丰富了...

    JVM-Java虚拟机

    能学到什么:1,JVM底层运行机制和原理;2JVM参数;3,垃圾回收原理;4,垃圾回收器的使用;5,调优实战案例 导语:平时我们所说的JVM广义上指的是一种规范。狭义上的是JDK中的JVM虚拟机。JVM的实现是由各个厂商来做...

    Java进阶教程解密JVM视频教程

    JVM 是 Java 程序的运行环境,学习 JVM,方能了解 Java 程序是如何被执行的,为进一步深入底层原理乃至程序性能调优打好基础。通过学习这门课程,你将掌握:1. JVM 内存结构的组成、各部分功能作用,学会利用内存...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    / 112 5.2.5 服务器JVM进程崩溃 / 113 5.3 实战:Eclipse运行速度调优 / 114 5.3.1 调优前的程序运行状态 / 114 5.3.2 升级JDK 1.6的性能变化及兼容问题 / 117 5.3.3 编译时间和类加载时间的优化 / 122 5.3.4 ...

    Java高级面试JVM虚拟机、内存结构、垃圾回收机制

    java工程师高级面试之JVM虚拟机底层原理篇:VM种类,内存结构,运行原理,垃圾回收算法,各种垃圾回收器等。

    java-virtual-machine-analysis.zip_jvm规范

    研究Java平台的核心——虚拟机.为了使Java在不同的平台上顺利运行,研究Java虚拟机(Java virtual ...究,同时结合Sun的《Java虚拟机规范》,总结出实现JVM的一些关键步骤,并提出改进JVM运行效率的建议.

    深入JVM内核—原理、诊断与优化

    第二周JVM运行机制简介堆、栈、方法区等JVM启动流程内存模型和volatile实例解释和编译运行的概念介绍JVM的内部结构、启动流程以及内存模型。并介绍JVM字节码的执行方式。第三周常用JVM参数堆的分配参数栈分 资源太大...

    深入JVM内核 - 原理、诊断与优化

    JVM运行机制简介 堆、栈、方法区等 JVM启动流程 内存模型和volatile实例 解释和编译运行的概念 介绍JVM的内部结构、启动流程以及内存模型。并介绍JVM字节码的执行方式。 第三课 常用JVM参数 堆的分配参数 栈分配及...

    Java面试整理,涵盖基础、JVM、线程并发、框架、MySQL、微服务、Redis、中间件、数据结构与算法等。陆续完善中.zip

    它的设计目标是“一次编写,到处运行(Write Once, Run Anywhere)”,这意味着开发者可以使用Java编写应用程序,并在支持Java的任何平台上无需重新编译即可运行,这得益于其独特的跨平台性,通过Java虚拟机(JVM)...

    Java面试基础测试题及答案

    4、 Java的核心机制是什么?并介绍其核心机制 1、JVM和GC 2、Jvm:在一台计算机上由软件或者硬件模拟的计算机(读取字节码代码的Cpu)。Java虚拟机(JVM)读取并处理经编译过的平台无关的字节码(class)文件;java...

    Java程序运行机制和过程

     这两种机制在支持着java程序的运行  Java虚拟机(JVM)  Java虚拟机(JVM)一种用于计算机设备的规范,可用不同的方式(软件或硬件)加以实现。编译虚拟机的指令集与编译微处理器的指令集非常类似。Java虚拟机...

    JVM内存管理白皮书

    sun公司出版的jvm运行机制管理丛书,需要深入jvm的同学可以下载来看看

Global site tag (gtag.js) - Google Analytics