【Java代码的运行过程】 ——每天一点小知识

news2024/11/15 17:50:52

在这里插入图片描述

                                                                              💧 J a v a 代码的运行过程 \color{#FF1493}{Java代码的运行过程} Java代码的运行过程💧          


🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 《数据结构与算法》专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
💧 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 💐
🥣 《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~ 🌊
🪁 希望本文能够给读者带来一定的帮助~🌸文章粗浅,敬请批评指正!🐥


文章目录

  • Java代码的运行过程
    • 🌊链接
    • 🌊初始化
    • 🌊类加载
    • 🌊双亲委派机制
    • 🌊总结
  • 🐳结语


    理解Java代码的运行过程对于开发者来说非常重要,它可以帮助我们更好地理解Java程序的执行流程和类加载机制。通过深入了解这些概念,我们可以更好地理解Java的工作原理和应用程序的执行过程。


Java代码的运行过程

    💧在Java中,当我们运行一个Java程序时,它会经历以下过程:链接初始化类加载双亲委派机制。让我们逐步了解每个过程的含义和作用。

在这里插入图片描述

🌊链接

    链接是将Java源代码转换为可执行代码的过程。它分为三个阶段:

  1. 💧验证(Verification):在这个阶段,Java虚拟机(JVM)将检查字节码的合法性和安全性,以确保它不会对系统造成损害。验证过程包括文件格式验证、元数据验证、字节码验证和符号引用验证

  2. 💧准备(Preparation):在准备阶段,JVM为类的静态变量分配内存,并设置默认的初始值这些变量在此阶段被赋予默认值,如整数类型的变量赋值为0引用类型的变量赋值为null

  3. 💧解析(Resolution):在解析阶段,符号引用被解析为直接引用符号引用是指用名称来引用类、方法、字段等的方式,而直接引用是指内存地址或偏移量等具体的指针。解析过程可以在编译时进行,也可以在运行时进行。

在这里插入图片描述

🌊初始化

    初始化是Java类加载过程的最后一步。当一个类被首次主动使用时,它将被初始化。初始化阶段主要完成以下任务:

  1. 💧静态变量赋值:将静态变量按照代码中的赋值语句进行初始化。

  2. 💧静态代码块执行如果类中有静态代码块,那么在初始化阶段会执行这些静态代码块。

  3. 💧执行父类的初始化如果该类有父类,并且父类还没有被初始化,那么会先初始化父类

    初始化过程按照严格的顺序进行的,保证了每个类的初始化操作是可控的。

🌊类加载

    类加载是Java代码运行过程的关键步骤之一。它负责将类的字节码加载到JVM中,并对其进行解析验证准备。类加载过程主要包括以下步骤:

  1. 💧加载:查找字节码,并将其加载到内存中。

  2. 💧连接:包括验证准备解析阶段。

  3. 💧初始化:执行类的初始化操作

类加载过程由类加载器(ClassLoader)执行,Java中有三种类加载器:启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader)。

  • 启动类加载器:负责加载Java核心库,如rt.jar。它是Java虚拟机的一部分,由C++实现。

  • 扩展类加载器:负责加载Java扩展库,如ext目录下的JAR文件。它是由Java编写的,是sun.misc.Launcher$ExtClassLoader类的实例。

  • 应用程序类加载器:也称为系统类加载器,负责加载应用程序的类路径(Classpath)下的类。它是由Java编写的,是sun.misc.Launcher$AppClassLoader类的实例。

这三种类加载器按照父子关系形成了一种层次结构,即双亲委派模型

🌊双亲委派机制

    双亲委派机制是Java类加载器的一种工作方式。当一个类加载器接收到加载类的请求时,它会先将这个请求委派给其父加载器进行处理。只有在父加载器无法找到所需类的情况下,子加载器才会尝试自己加载。

这种机制的好处在于可以保证类的加载是一种层次结构,避免了类的重复加载冲突。它的工作流程如下:

  1. 💧当一个类加载器收到加载类的请求时,首先检查是否已经被加载过如果已经加载过,直接返回对应的类

  2. 💧如果尚未加载过,则将加载请求委派给父加载器

  3. 💧父加载器接收到请求后重复上述过程直到到达启动类加载器。如果启动类加载器无法加载该类,将返回一个ClassNotFoundException异常。

  4. 💧如果父加载器成功加载了类,将返回对应的类。子加载器收到类后,也会返回给请求者

通过双亲委派机制,可以确保类的加载是从上到下的层次结构,避免了类的重复加载安全性问题
在这里插入图片描述

🌊总结

    Java代码的运行过程包括链接、初始化、类加载和双亲委派机制链接阶段将Java源代码转换为可执行代码,包括验证、准备和解析。初始化阶段完成静态变量赋值和静态代码块执行等操作。类加载过程由启动类加载器、扩展类加载器和应用程序类加载器完成,并遵循双亲委派机制,确保类的加载是一种层次结构。


在这里插入图片描述


🐳结语

🐬初学一门技术时,总有些许的疑惑,别怕,它们是我们学习路上的点点繁星,帮助我们不断成长。

🐟积少成多,滴水成河。文章粗浅,希望对大家有帮助!

💧参考文献:

  • Java Class Loading Mechanism
  • Understanding Class Loading in Java
  • The Java ClassLoader
  • Understanding the Java ClassLoader

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/635169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue中如何处理日期与时间

Vue中如何处理日期与时间 日期和时间处理是Web应用中常见的需求,Vue作为一款流行的前端框架,提供了很多方便的工具和库,以满足不同业务场景下的需求。本文将介绍如何在Vue中处理日期和时间,包括使用原生JavaScript、Moment.js和D…

useMemo和useCallback

上述代码中,useSate 用于定义了三个状态:supNum、oppNum、x。在组件函数中,我们根据这些状态来计算投票的支持率,并将其渲染到视图中。但是,每次状态变化时,投票支持率的计算都会重新执行,即使其…

c++深搜1-迷宫类问题

目录 1.问题引入 2.知识讲解 3.例题解析 【例题1】迷宫的第一条出路。 题目描述 输入格式 输出格式 样例 输入数据#1 输出数据#1 输入数据#2 输出数据#2 【例题2】迷宫的所有路径。 【例题3】走出迷宫的最少步数。 1.问题引入 拓拓小时候玩迷宫游戏时&#xff…

小酷智慧地图3D导公众号小程序 v1.0.50+前端

🎈 限时活动领体验会员:可下载程序网创项目短视频素材 🎈 🎉 有需要的朋友记得关赞评,阅读文章底部来交流!!! 🎉 ✨ 源码介绍 小酷智慧地图3D导览系统适用于城市或乡镇全…

性能测试之全链路压测实战理论详解

目录 前言 01为什么需要全链路压测? 02全链路压测解决了哪些问题? 03哪些业务场景适合做 04基础技术组件 05小结 前言 要说当下研发领域最热门的几个词,全链路压测 肯定跑不了。最近的几次大会上,也有不少关于全链路的议题。…

Vue项目中使用MapboxGL开发3D地图教程(一)MapboxGL介绍以及前期vue项目的搭建

MapboxGL介绍以及前期vue项目的搭建 1、Mapbox-gl简介2、搭建vue项目2.1、创建vue项目2.2、注册mapbox官网2.3、mapbox-gl入门案例 3、Mapbox-gl地图主要配置参数说明 1、Mapbox-gl简介 Mapbox-gl是一个开源、基于webgl技术的前端地图类库。 地图数据渲染和可视化这块我们经常用…

第七章 详细设计

结构化程序设计的基本结构包括 顺序结构、选择结构、循环结构 三种。 详细设计层 详细设计概览 详细设计的任务:定义每一模块 三种控制结构:顺序、选择、循环 伪码 伪码是一种混合语言。外 部采用形式语言定义控制 结构和数据结构,内部使…

OpenGL光照之投光物

文章目录 平行光点光源衰减实现衰减 聚光手电筒平滑/软化边缘完整代码 我们目前使用的光照都来自于空间中的一个点。它能给我们不错的效果,但现实世界中,我们有很多种类的光照,每种的表现都不同。将光投射(Cast)到物体的光源叫做投光物(Light…

算法提高-图论- 最小生成树的扩展应用

最小生成树的扩展应用 最小生成树的扩展应用AcWing 1146. 新的开始AcWing 1145. 北极通讯网络AcWing 346. 走廊泼水节AcWing 1148. 秘密的牛奶运输 最小生成树的扩展应用 AcWing 1146. 新的开始 利用虚拟源点建图和原题的题意是等价的,因此我们使用虚拟源点建图套…

主从架构lua脚本-Redis(四)

上篇文章介绍了rdb、aof持久化。 持久化RDB/AOF-Redis(三)https://blog.csdn.net/ke1ying/article/details/131148269 redis数据备份策略 写job每小时copy一份到其他目录。目录里可以保留最近一个月数据。把目录日志保存到其他服务器,防止机…

服务器网站搭建(一)

文章目录 环境搭建域名购买和解析创建网站环境搭建 一台服务器,我买的腾讯云新加坡的。根据需求选择配置。 重置密码: 自己设置的密码要记住: 登录: 安装宝塔(centos系统),参考官网: https://www.bt

Python 接口测试框架

目录结构定义 首先来看一下项目整体的结构 框架结构 代码结构 Excel 文件结构 代码详细解析 1.工具包 tools 封装操作 excel 方法 excel_operation.py import xlrd from config.config import PROJECT_PATHclass OperationExcel:def __init__(self, file_nameNone, sheet_…

县村快递物流小程序 v1.2.63+前端(本站修复版)

🎈 限时活动领体验会员:可下载程序网创项目短视频素材 🎈 🎉 有需要的朋友记得关赞评,文章底部来交流!!! 🎉 ✨ 源码介绍 核心功能: 1、县分拣中心入库出库 2…

什么是Vue的脚手架(Vue CLI)?

什么是Vue的脚手架(Vue CLI)? Vue.js 是一款流行的 JavaScript 框架,用来构建现代的单页面应用程序(SPA)。Vue.js 的核心库提供了丰富的功能和 API,但是创建一个完整的应用程序需要更多的工具和…

浏览器插件 | Font Picker - 网页字体识别工具

目录 软件简介 Font Picker插件背景 Font Picker插件离线安装教程 Font Picker 小结 软件简介 Font Picker 插件是一款用于 Chrome 浏览器的字体选择器,这种网页字体识别工具看起来非常的干净,使用起来也十分的简单。本文提供Font Picker网页字体…

d3dcompiler_43.dll文件丢失怎么修复,最新修复方法分享

本教程操作系统:Windows系统、 d3dcompiler_43.dll是电脑文件中的dll文件(动态链接库文件)。如果计算机中丢失了某个dll文件,可能会导致某些软件和游戏等程序无法正常启动运行,并且导致电脑系统弹窗报错。 在我们打开…

【LeetCode】110. 平衡二叉树

110. 平衡二叉树(简单) 思路 对二叉树做先序遍历,从底至顶返回子树最大高度,若判定某子树不是平衡树则“剪枝”直接向上返回。 递归返回值: 当节点 root 左、右子树的高度差 > 1:返回 -1,代…

吴恩达471机器学习入门课程1第1周

文章目录 1加载数据集2计算COST(均值平方差,1/2m(y_pre - y))3计算梯度4画出成本曲线5梯度下降 import math, copy import numpy as np import matplotlib.pyplot as plt plt.style.use(./deeplearning.mplstyle) from lab_utils_uni import plt_house_x, plt_conto…

OpenMMLab-AI实战营第二期——4-2.MMDetection代码课

文章目录 1. MMDetection介绍(vs MMSegmentation,mmdetection3d)2. 代码2.1 使用pycocotools配合exif可视化图像2.2 mmdetection中config的继承2.3 mmdet的数据集可视化问题(VISUALIZERS)2.4 pin_memory参数设置2.5 ma…

康佳液晶电视(非智能)Mstar V56 芯片

    2023/6/11 下午8:10:01 康佳用的地面波数字电视解码芯片是?  2023/6/11 下午8:10:08 康佳电视使用的地面波数字电视解码芯片可能因不同的产品型号而有所不同。然而,根据…