`
wx1568520008
  • 浏览: 20428 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Java JVM执行流程

 
阅读更多

一、JVM的体系结构

3a412ca704ea619a4a70fa4a9cf32c4591b.jpg

类装载系统

1、定位和导入二进制class文件

2、验证导入类的正确性

3、为类分配初始化内存

4、帮助解析符号引用

执行引擎

执行包在装载类的方法中的指令,也就是方法

运行区数据

虚拟机会在整个计算机内存中开辟一块内存存储JVM需要用到的对象,变量等,运行区数据有分很多小区,分别为:方法区,虚拟机栈,本地方法栈,堆,程序计数器。

GC

垃圾回收器,是负责回收内存中无用的对象,就是这些对象没有任何引用了,它就会被视为垃圾,也就会被删除。

二、类在JVM的执行流程

那么类在JVM的执行流程是怎么做的呢?共有三步:加载、链接和初始化。

加载

JVM将java类的二进制形式加载到内存中,并将他缓存在内存中,以便后面使用,如果没有找到指定的类就会抛出异常classNotFound,进程在这里结束。没有错误就继续在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区域数据的访问入口。

链接

这个阶段做三件事:验证、准备和解析(可选)。

验证是JVM根据java语言和JVM的语义要求检查这个二进制形式。例如,如果篡改经过编译后的类文件,那么这个类文件可能就不能使用了。

准备是指准备要执行的指定的类,准备阶段为变量分配内存并设置静态变量的初始化。在这个阶段分配的仅为类的变量(static修饰的变量),而不包括类的实例变量。对非final的变量,JVM会将其设置成“零值”,而不是其赋值语句的值:

public static int num = 8;

那么在这个阶段,num的值为0,而不是8。 final修饰的类变量将会赋值成真实的值。

解析是检查指定的类是否引用了其他的类/接口,是否能找到和加载其他的类/接口。这些检查将针对被引用的类/接口递归进行,JVM的实施也可以在后面阶段执行解析,即正在执行的代码真正要使用被引用的类/接口的时候。

初始化

在这最后一步中,JVM用赋值或者缺省值将静态变量初始化,初始化发生在执行main方法之前。在指定的类初始化前,会先初始化它的父类,此外,在初始化父类时,父类的父类也要这样初始化。这个过程是递归进行的。

简而言之,整个流程是将类存进内存中,检查类的对应调用的类和接口是否可正常使用,再对类进行初始化的过程。

 

三、Java代码编译和执行的整个过程

Java代码编译是由Java源码编译器来完成,流程图如下所示:

6b1967a2d6ba3d70fac4c5931eabd8f667b.jpg

Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:

2b70bf18bda7046f1fed298b25f0677a181.jpg

四、总结

Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。

程序开始执行时他才运行,程序结束时他就停止。你在同一台机器上运行三个程序,就会有三个运行中的Java虚拟机。

Java虚拟机总是开始于一个main()方法,这个方法必须是公有、返回void、直接受一个字符串数组。在程序执行时,你必须给Java虚拟机指明这个包换main()方法的类名。 Main()方法是程序的起点,他被执行的线程初始化为程序的初始线程。程序中其他的线程都由他来启动。

Java中的线程分为两种:守护线程(daemon)和普通线程(non-daemon)。守护线程是Java虚拟机自己使用的线程,比如负责垃圾收集的线程就是一个守护线程。当然,你也可 以把自己的程序设置为守护线程。包含Main()方法的初始线程不是守护线程。

只要Java虚拟机中还有普通的线程在执行,Java虚拟机就不会停止。如果有足够的权限,你可以调用exit()方法终止程序。

转载于:https://my.oschina.net/u/4167465/blog/3078745

分享到:
评论

相关推荐

    JAVA JVM原理资料

    - **JRE (Java Runtime Environment)**:包含JVM及运行Java应用程序所需的基本库。 - **JDK (Java Development Kit)**:包含了JRE以及编译、调试和文档工具。 #### 三、Java源码级编译器(javac) **javac**是...

    Java虚拟机(JVM)面试题 51道.pdf

    4. **JVM的组成部分和运行流程**: - JVM主要包括类装载器(Class Loader)、执行引擎(Execution Engine)、运行时数据区(Runtime Data Area)和本地接口(Native Interface)。 - 类装载器负责加载类文件到内存...

    揭秘Java虚拟机-JVM设计原理与实现

    Java虚拟机是Java平台的核心组成部分,它负责执行字节码,为开发者提供了跨平台的运行环境。以下是该书可能涉及的一些关键知识点: 1. **JVM架构**:JVM主要由类装载器、运行时数据区、执行引擎、本地方法接口和...

    JVM(Java虚拟机)

    JVM(Java虚拟机)的整个流程:发展,运行区域,垃圾回收器,内存分配策略,垃圾收集,JVM分析工具,JVM优化

    JAVA8虚拟机(jvm)规范_Chinese version.rar

    Java虚拟机(JVM)是Java程序运行的核心组件,它负责解释和执行字节码,为Java应用程序提供了一个跨平台的运行环境。《JAVA8虚拟机(jvm)规范_Chinese version》提供了关于JVM的详细中文指南,对于理解Java程序的运行...

    java JVM详解

    3. **运行**:使用 Java 解释器 (java) 执行字节码,这个过程是在 JVM 上完成的。 ##### 1.3 Java 运行的原理 Java 程序的运行依赖于 JVM。JVM 是一个抽象的计算机,它提供了一个运行环境,使字节码能够在不同的...

    Java 虚拟机JVM内存模型

    即编译器将Java源代码编译成字节码,而JVM执行引擎在运行时解释执行字节码,或将其编译成本地代码以提高执行效率。 ##### 1.5 平台无关性 Java的最大特点之一是平台无关性,这是因为Java源代码不是直接在操作系统上...

    Java语言规范和JVM规范官网文档

    Java虚拟机(JVM)是Java程序运行的基础,它负责解析字节码并执行。JVM规范详细描述了内存模型、类加载机制、垃圾回收、多线程、异常处理、字节码指令集等核心特性。了解JVM的工作原理对于性能优化、内存管理以及...

    JVM.rar_java 工作流_java 虚拟机_jvm_jvm hook_虚拟机 Java

    在深入理解JVM的工作流程之前,我们首先需要知道Java程序是如何被编译和运行的。Java源代码(.java文件)通过Java编译器(javac)被编译成Java字节码(.class文件),这些字节码可以在任何安装了JVM的平台上运行,...

    框架->java语言->jvm->os->汇编->硬件

    3. **JVM(Java虚拟机)**:JVM是Java程序的执行环境,它将Java字节码转换为特定平台的机器码,实现了跨平台运行。了解JVM包括内存模型(堆、栈、方法区等)、垃圾回收机制、类加载过程、性能优化等方面。 4. **...

    java的执行原理和JVM

    3. **运行**:Java虚拟机(JVM)解释并执行字节码。为了使Java程序能够在不同的操作系统上运行,需要在每个目标平台上安装相应的JVM版本。 ### Java虚拟机(JVM) JVM是Java程序执行的核心,它负责将Java字节码...

    2024年java面试题-jvm之java虚拟机面试题

    - **JVM执行字节码**:JVM负责解释并执行字节码,最终将指令转换为机器语言供处理器执行。 **2. Java为何被称为跨平台语言** Java之所以能跨平台运行,主要得益于其“一次编写,到处运行”的设计理念。这是通过JVM...

    Java JVM 面试题总结

    JVM(Java Virtual Machine,Java虚拟机)的主要作用在于为Java程序提供一个跨平台的运行环境。通过生成能在不同平台上运行的字节码(即目标代码),使得Java程序无需重新编译即可在各种操作系统上执行。这一特性极...

    Java JVM详解

    Java虚拟机(JVM)是Java程序运行的核心组件,它为Java提供了跨平台的执行环境。JVM的主要职责包括类加载器(Class Loader)和执行引擎(Execution Engine),这两个部分对于理解Java程序的运行至关重要。 1. Java...

    jvm 启动过程

    5. **初始化**:这是最后一个阶段,JVM执行类构造器`()`方法,初始化类变量和执行静态初始化块。 整个启动过程确保了Java应用程序的安全性和一致性,同时为后续的执行提供了必要的环境和资源。通过这种方式,Java...

    java虚拟机简介 jvm介绍

    #### 二、Java程序的执行流程 Java程序的执行过程大致可以分为以下几个阶段: 1. **源代码编写**:程序员使用Java语言编写源代码。 2. **编译**:通过Java编译器(如javac)将源代码编译成字节码(.class文件)。 ...

    JVM执行子系统原理

    ### JVM执行子系统原理 #### 一、类文件结构与字节码指令 **Class类文件结构** Class文件是Java程序编译后产生的文件,它采用了一种类似于C语言结构体的形式来组织数据,其中各个数据项目紧密排列,没有任何额外...

    很入理解JVM体系

    3、JVM运行流程 4、JVM生命周期 5、三大流行的JVM 2.2、JVM体系结构 1、类加载器 2、执行引擎 3、运行时数据区 4、本地库接口 2.3、JVM内存参数调整及监控 1、JVM之内存调整 2、JVM监控工具之Jconsole 3、JVM监控...

    Java(JVM)虚拟机结构基础(转自Java研究组织)

    它为Java程序提供了一个独立于平台的运行环境,使得Java应用可以在任何安装了JVM的设备上运行。JVM的主要功能包括:内存管理、代码解释、垃圾回收以及安全性检查等。了解JVM的内部结构对于深入理解Java程序的运行...

Global site tag (gtag.js) - Google Analytics