首页 > 编程语言 >Java 程序执行过程

Java 程序执行过程

时间:2024-04-04 17:12:44浏览次数:36  
标签:初始化 Java JVM 程序执行 阶段 https 过程 链接 加载

Java 程序的执行过程

Tips:
对于java程序的执行的过程,参考了两张图片来理解,并主要参照图2进行讲解!(这里不对具体的内容进行详细讲解,对于具体的内容,将给出参考的链接)

图 1:JVM Model

图 2:Java 运行流程

java的执行可以分为编译和运行两个阶段,分别对应着图2的左侧和右侧部分这部分我们将侧重运行阶段的介绍。

  1. 编译:将合法.java文件翻译成字节码(bytecode)文件.class。其中包含着检查、分析(词法,语法,语义),优化等流程。
    https://www.cnblogs.com/code-duck/p/13568092.html
  2. 运行:运行阶段的整个流程可以分为加载阶段(loader),链接阶段(linking),初始化阶段(intialization)、解释执行阶段(interpreter)。参照图 1的JVM模型,可知,加载、链接、初始化和解释执行之间是通过运行时数据区域进行交互的(runtime data area)
  • 加载阶段:将字节码文件加入到内存中JVM的方法区(Methods Area)。
  • 链接阶段:主要包含验证(保证加载类的正确性)、准备(为类变量分配内存并设置类变量的初始值)、解析(将常量池中的符号引用替换为直接引用)三个阶段。
  • 初始化阶段:若该类具有超类,则对其进行初始化,执行静态初始化器(成员变量也会被初始化)。

Tip:
加载、链接、初始化的详细了解可以参考如下链接:
https://blog.csdn.net/qq_32238611/article/details/114546719
关于JVM方法区维护的类信息及其他区域维护的信息可以参考如下链接:
https://blog.csdn.net/yfqnihao/article/details/8289363

  • 执行阶段:JVM将定位public static void main(String[] args),JVM按照main()方法的代码进行逐行执行。

Tips:

  1. JVM内存简单介绍:
    方法区:在加载阶段,只将类加载到方法区(故方法区中还包含常量池等),
    堆:具体实例的创建是在程序运行时(实例创建被放在堆内存中)
    栈:方法运行过程中的局部变量
    PC寄存器:记录程序执行的位置。
    本地方法栈:指使用到的本地方法。

①PC寄存器、本地放法栈和栈 是线程对立的。
②JVM在操作系统层面为操作系统的堆区,因此可以实现捕获异常等优势
2. 解释执行过程
解释执行包含JIT、AOT等诸多技巧,但是不同的技巧有着不同的优势和应用场景。

Blog Reference

https://www.cnblogs.com/linj7/p/14122919.html
https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.1
https://javaguide.cn/java/basis/java-basic-questions-01.html#什么是字节码-采用字节码的好处是什么

LLM Question

https://poe.com/chat

标签:初始化,Java,JVM,程序执行,阶段,https,过程,链接,加载
From: https://www.cnblogs.com/sangmeng/p/18114337

相关文章

  • JAVA IO流学习1
    目标:File类:File类是java.io包中很重要的一个类File类的对象可以代表一个文件或者目录,可以修改文件大小、文件最后修改日期、文件名等File对象不能操作文件的具体数据,即不能对文件进行读和写的操作File的构造方法:File(Stringpathname) -------指定文件(目录)名和路径创建......
  • Java:多线程-继承Thread类
    在Java中,通过继承Thread类是实现多线程的一种方式。这种方式允许你创建自己的线程类,并定义线程执行的具体内容。以下是关于继承Thread类的详细讲解:继承Thread类的步骤创建线程类:创建一个继承自Thread的子类。重写run方法:在子类中重写run方法,定义线程执行的任务。run方法是......
  • Java:多线程相关知识概念
    Java中的多线程是指在单个程序中并行执行多个线程(即执行路径或任务)的能力。多线程在Java中是一个核心概念,它允许应用程序更有效地利用CPU资源,同时还能进行并发操作。以下是Java中多线程相关的详细知识:线程的基本概念线程(Thread):是操作系统能够进行运算调度的最小单位。它......
  • Java解决跨域问题
    importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.CorsRegistry;importorg.springframework.web.servlet.config.annotation.WebMvcCo......
  • java计算机毕业设计(附源码)音乐播放平台(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着数字时代的到来,音乐播放平台已经成为了人们生活中不可或缺的一部分。这些平台通过互联网提供了大量的音乐资源,使得用户可以随时随地欣赏到自己喜欢的......
  • java计算机毕业设计(附源码)音乐播放器app(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在当今的数字化时代,音乐已经成为人们日常生活中不可或缺的一部分。随着智能手机和移动互联网的普及,音乐播放器app应运而生,为人们提供了随时随地欣赏音乐......
  • Java 标识符&关键字
    关键字关键字(Keywords)在编程语言中具有特殊意义的保留字。它们是语言的基础构建块,用于定义程序的结构和逻辑。在Java中,关键字共有53个。这些关键字具有特殊的语法含义,不能用作标识符(例如变量名、类名、方法名等),因为它们在Java中已经有了特定的用途。Java中关键字有以下几......
  • golang和Java比较
    Golang(也被称为Go)和Java都是流行的编程语言,都有自己的优点和用途。下面是Golang和Java之间的一些比较。1、性能Golang被设计为一种高性能的语言,而Java的性能更加平均。Golang通过使用并发和轻量级线程(goroutines)来实现高性能,而Java使用线程(threads)来实现并发。Golang(Go)和Jav......
  • Java线程池
    1.线程池Java线程池是Java并发编程中非常重要的一部分,它允许我们创建和管理一组线程,这些线程可以执行提交给线程池的任务。优点如下:优点描述降低资源消耗通过重复利用已创建的线程,避免频繁创建和销毁线程带来的性能开销提高响应速度当任务到达时,任务可以不需要等到线程创......
  • 基于Java语言校园快递代取系统的设计与实现论文
    摘要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本校园快递代取系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理......