java的运行机制以及整体流程

背景:学习了这么多年的Java,把自己的理解写成JVM系列,以便于后面的温习,以及帮助更多的java开发人员。

       开篇先梳理下,我们之前写的第一个Hello World!,当我们运行出来后,在控制台打印的那种激动心情,但是他的背后是如何运行的呢?那么问题来了,我们写的java代码到底是如何运行起来的,中间又经历了什么?带着我这些问题,我们继续往下看。

        首先假设我们写好了一个java代码,在IDEA或者Eclipse工具上,会有一个“.java“后缀的代码文件,我们写好后,想要部署到线上的机器上去运行,一般都是把代码通过IDEA工具编译生成".class"后缀文件后,再进行打包,打包成“.jar”后缀的jar包,或者 “.war” 后缀的war包; 最后再通过 tomcat部署 ,或者 java 命令进行运行;是不是这样的一个过程;粗略的看确实是这样一个过程,来看下图,来回忆下这个过程:

         

上面的过程中,java代码通过idea工具编译后,生成“.class” 后缀的,字节码文件(字节码是能够被虚拟机认识的16进制字节,其中还有一些字节码指令等等的内容),那么,我们编译好的文件是如何运行起来的呢?

这个时候我们就要使用一个“Java -jar”的命令,来运行程序,实际上此时就会启动一个JVM进程,这个JVM就会负责运行这些“.class” 字节码文件,相当于负责运行我们写好的系统。

对于上面的过程,IDEA编译打包代码的过程,我们暂时不在这块过多的说明,我们把重点放到运行这块上来,这块才是核心内容,下面就说下打包后,部署运行的内部是如何运行的?

        当我们运行了一个"java -jar" 命令后,就是启动了一个JVM进程,就会运行我们编写的字节码文件对吧,我们按照逆推的方式来理解,既然要执行字节码,我们是不是要先找到字节码文件,那么怎么找呢,找到后怎么读取执行,针对这两个问题,我们引出了两个概念 “类加载器”,“字节码执行引擎”,类加载器很好理解,字面意思,就是把类加载到JVM中,以供后续代码运行使用;

字节码执行引擎,就是JVM会基于自己的字节码引擎来执行类加载器,加载到内存中的类。

为了方便我们理解上面的过程,请看下图的过程。

        好了,说过了大概的整体JVM运行流程,我们来具体说下类加载的过程,

先想一个问题:JVM在什么情况下会加载一个类呢?

        类加载的过程非常的繁琐复杂,我们在工作中,只要把握住核心的工作原理就可以了,

一个类从加载到使用,一般会经历下面的这个过程:

        加载->验证->准备->解析->初始化->使用->卸载

 所以,首先我们要搞明白上面的问题,就是JVM在什么情况下回去加载一个类呢?翻译过来就是说,啥时候会从".class"字节码文件中加载这个类到JVM内存中,毕竟,内存是内存是有限的,加载过程很繁琐,也很消耗资源,答案很简单,就是在你的代码中用到这个类的时候去加载。

此时又有问题了,既然是这个类是用到时候去加载,那么如果我在这个类中,用到了多个引用怎么办,就没有个先后顺序么?别担心,这个JVM 早就想到了,他就是类加载机制,双亲委派机制,类加载器都有那些?双亲委派机制又是什么?以及类加载过程中的各个节点都是执行的什么?下一篇详细说

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

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

相关文章

史上最全的数据科学与艺术

1.背景介绍 数据分析是一种将数据转化为价值的艺术和科学。它涉及到大量的数学、统计、编程、数据库、机器学习等多个领域的知识。数据分析的目的是从数据中提取有用的信息,以便做出明智的决策。 数据分析的艺术体现在数据分析师需要具备丰富的经验和洞察力&#…

『C++成长记』内存管理

🔥博客主页:小王又困了 📚系列专栏:C 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、C/C内存分布 二、内存管理方式 📒2.1C语言内存管理方式 &#x…

【OpenAI】自定义GPTs应用(GPT助手应用)及外部API接口请求

11月10日,OpenAI正式宣布向所有ChatGPT Plus用户开放GPTs功能 简而言之:GPT应用市场(简称GPTs, 全称GPT Store) Ps: 上图为首次进入时的页面,第一部分是自己创建的GPTs应用,下面是公开可以使用的GPTs应用 一、创建GPTs…

振弦采集仪在桥梁结构健康监测中的应用探索

振弦采集仪在桥梁结构健康监测中的应用探索 振弦采集仪是一种用于测量结构振动特性的仪器,通过采集结构上的振弦信号,可以评估结构的健康状况。在桥梁结构健康监测中,振弦采集仪可以发挥重要的作用。 首先,振弦采集仪能够实时监测…

上传文件:413 Request Entity Too Large Maximum upload size exceeded 解决方案

文章目录 前言一、原因分析二、解决方案1.nginx配置文件2.application.yml配置文件 总结 前言 在上传文件时,如果没有做一些配置的话,会导致上传失败:413 Request Entity Too Large 或者 Maximum upload size exceeded。 提示:以…

geemap学习笔记049:下载Landsat数据时遇到的一个问题

前言 最近在下载Landsat 8 地面反射率数据(Surface Reflectance)时,遇到了一个问题,无论是使用geemap.ee_export_image_to_drive() 函数还是geemap.download_ee_image() 函数下载的数据,易康都打不开,显示…

【Java】面向对象 OOP

文章目录 面向对象OOP概述一、对象内存相关二、类的成员之一:成员变量(Field)2.1 如何声明成员变量2.2 成员变量 与 局部变量 三、类的成员之一:成员方法(Method)3.1 方法调用内存分析3.2 方法的重载3.3 可…

NAS入门(学习笔记)

文章目录 AutoMLNAS初期NAS当前NAS框架One-Shot NAS权重共享策略 Zero-Shot NASZen-NASNASWOTEPENAS 参考资料 AutoML 深度学习使特征学习自动化 AutoML 使深度学习自动化 自动化机器学习 (automated machine learning) 是一种自动化的数据驱动方法, 并做出一系列决策。 按…

第2、3次作业

题目1: 基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! 题目2: 给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于[www.openlab.com/student](http://www.openlab.c…

RIP【新华三与华为区别】

【介绍】 rip分为rip 1 与 rip 2 ,rip 2 是对 rip 1 的一种升级,rip 2 可以进行认证等功能 【命令】 新华三: [HC3-R1] rip #启用rip [HC3-R1-rip] version 2 #告知rip 版本号 [HC3-R1-rip] network 192.168.1.0 #宣告其网段 [HC3-R1-rip] …

【python】py-spy 实时显示python进程内的线程堆栈CPU消耗 python CPU消耗分析

安装 pip install py-spy AI调用源码,红色调用时,python进程CPU 100% 启动程序,输入问题,观察CPU top sudo .local/bin/py-spy top --pid 7150 可以看到,此时与显卡交互占用了绝大部分CPU,有点死循环检测…

AI大模型预先学习笔记一:transformer和fine tune技术介绍

一、商业观点:企业借助大模型获得业务增长可能 二、底层原理:transformer 1)备注 ①下面每个步骤都是自回归的过程(aotu-regressive):已输出内容的每个字作为输入,一起生成下一个字 ②合起来就…

全自动网页制作系统流星全自动网页生成系统重构版输入网页信息即可制作

源码优点: 所有模板经过精心审核与修改,完美兼容小屏手机大屏手机,以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 免费制作 为用户使用方便考虑,全自动网页制作系统无需繁琐的注册与登入,直接…

CUTANA™ CUTRUN Assays ——实现超敏基因组定位

蛋白质和核酸是构成生命体最为重要的两类生物大分子,二者间的相互作用一直是分子生物学研究的中心问题之一。研究细胞内蛋白质-DNA相互作用的常用方法是染色质免疫沉淀(Chromatin Immunoprecipitation, ChIP) ,同时ChIP还常被用于确定基因组上与组蛋白修…

MybatisPlus框架--如何让公共字段自动更新插入

目录 建一个springboot项目 引入mybatisplus依赖 功能区 如何让公共字段自动更新插入(createTime,updateTime) 1.创建表 2.项目 3.Application 4.application.yml 5.pom.xml 6.entity 7.mapper 8.service 9.service下的impl 10…

使用scipy处理图片——滤镜处理

大纲 black_tophatwhite_tophatconvolvecorrelategaussian_filtergaussian_laplacemaximum_filtermedian_filterminimum_filterpercentile_filterprewittrank_filtersobelspline_filteruniform_filter基础代码代码仓库 在《使用numpy处理图片——模糊处理》一文中,我…

【绩效考核】分享:海底捞的考核方法

很多企业都希望学习海底捞的管理方法。在绩效考核方面,海底捞的“不考核利润、考核满意度”始终是一大特色。它重视门店管理者的绩效考核,并将客户满意度作为绩效考核的核心,这对其他企业是否具有借鉴意义?海底捞始终秉承“服务至…

MySQL——性能优化与关系型数据库

文章目录 什么是性能?什么是关系型数据库?数据库设计范式 常见的数据库SQL语言结构化查询语言的六个部分版本 MySQL数据库故事历史版本5.6/5.7差异5.7/8.0差异 什么是性能? 吞吐与延迟:有些结论是反直觉的,指导我们关…

ioctl操作实现

ioctl&#xff0c;避免使用三个全局变量&#xff0c;因此写进一个结构体里面 ioctl对文件属性进行操作 #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/cdev.h> #include <asm/uaccess.h>#define…

微信商家转账到零钱怎么开通?场景模板

商家转账到零钱是什么&#xff1f; 使用商家转账到零钱这个功能&#xff0c;可以让商户同时向多个用户的零钱转账。商户可以使用这个功能用于费用报销、员工福利发放、合作伙伴货款或分销返佣等场景&#xff0c;提高效率。 商家转账到零钱的使用场景有哪些&#xff1f; 商家…