【死磕JVM】——-2、Java代码编译和执行的整个过程

死磕JAVA10余年,呕心整理出了核心知识点已经做成PDF,无私奉献 想在面试、工作中脱颖而出?想在最短的时间内快速掌握 Java 的核心基础知识点?想要成为一位优秀的 Java 工程师?本篇文章能助你一臂之力!目前正值招聘求职旺季,很多同学对一些新技术名词都能侃侃而谈,但对一些核心原理理解的不够透彻,特别是对 Java的一些核心基础知识点掌握的不够,例如JVM、常用的算法和数据结构等。正所谓万丈高楼平地起,只有把基础掌握的牢固,才能走的更远,面对不断更新的技术才能快速掌握,同时在面试、工作中也更能脱颖而出! 阅读详情

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


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


Java代码编译和执行的整个过程包含以下三个重要机制:

1.Java代码编译机制。

2.类加载机制。

3.类执行机制。

Java源码编译机制

Java源码编译机制由以下三个过程组成:

1.分析和输入到符号表。

2.注解处理。

3.语义分析和生成class文件。

流程图如下:


最后生成的class文件由以下部分组成:

1.结构信息。

2.元数据。

3.方法信息。


类加载机制:

JVM人类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描述:


1)Bootstrap ClassLoader

负责加载$JAVA_HOME中jre/lib/rt.jar里所有的Class,由C++实现,不是ClassLoader的子类。

2)Extension ClassLoader

负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或 -Djava.ext.dirs指定目录下的jar包。

3)App ClassLoader

负责记载classpath中指定的jar包及目录中的class。

4)Custom ClassLoader

属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader。

加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到Bootstrap ClassLoader逐层检查,只要某个ClassLoader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。


类执行机制:

JVM是基于栈的体系结构来执行Class字节码的,线程创建后,都会产生程序计算器(PC)和栈(Stack),程序计算器存放下一条要执行的指令在方法内的偏移量,栈中存放一个个栈帧,每个栈帧对应着每个方法的每次调用,而栈帧又是有全局变量区和操作数栈两部分组成,局部变量区用于存放方法中的局部变量和参数,操作数栈中用于存放方法执行过程中产生的中间结果。 

栈的结构图如下所示:



死磕Java之Java核心语法 一、概述 (一)Java语言概述 1、Java是SUN1995年推出的一门高级编程语言。 2、Java之父还是有必要知道的,学Java不知道Java之父,被问到会被笑话的,Java之父是詹姆斯·高斯林(James Gosling)。 3、Java应用领域: Java SE(Java Standard Edition)标准版:支持面向对象桌面级应用(比如:Windows下的应用程序)的Java... 阅读详情

相关推荐

java代码的方式对java源码进行编译并打包成jar

java代码的方式对java源码进行编译并打包成jar,从而实现对复杂java源码的快速编译并形成sdk包,提供给第三方友商使用!

java 编译源码,java 源码编译

Java语言的“编译期”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器(叫“编译器的前段”更准确)——把*.java文件转变成*.class文件的过程;也可能是虚拟机的后端运行期编译器(JIT)把字节码转变成机器码的过程;还可能是指静态提前编译器(AOT编译器)直接把*.java文件编译成本地机器码的过程。Javac编译器Javac编译器不像HotSpot虚拟机那样使用C++语言实现...

weixin_36282765的博客 620

java编译器(源代码)

java编译器 (源代码+gui图形界面+英文报告) 包括词法分析,语法分析 三地址代码生成。 可以先看看http://blog.chinaunix.net/u/21684/showart_218863.html

java代码编译过程_Java代码编译和执行的整个过程

一、简述Java代码编译和执行的整个过程包含了三个重要的机制:①Java源码编译机制;②类加载机制;③类执行机制二、Java源码编译机制Java代码编译是由Javac编译器来完成,流程如图:Javac是一种编译器,能将一种语言规范转化成另外一种语言规范,通常编译器都是将便于人理解的语言规范转化成机器容易理解的语言规范,如C/C++或者汇编语言都是将源代码直接编译成目标机器码,这个目标机器代码是CP...

weixin_32420193的博客 800

如何将rvt(BIM)转换为点云格式

1、为什么将BIM转换为点云格式? 如何使设计BIM与真实场景进行配准,分析在建、未建、已建构建的情况,真实场景是通过点云生产的,和点云配准需要相同的格式。 2、如何转换? 实用工具revit,转换过程如下图,这样就可以转换成三角网格形式。 3、FBX还需要进行一次转换,即转换成点云常用的类型,如bin\ply\pcd等格式。 需要软件cloudcompare.exe,软件下载地址百度云 链接:https://pan.baidu.com/s/1pflcKNc04loBnS1yKR39hw 提取码:obaf

self_Name_的博客 4489

【NLP】使用 PyTorch 从头构建自己的大型语言模型 (LLM)

如果我们在 n 维空间中绘制一个向量,看起来相似的物体(如狗和猫)将彼此靠近,而看起来不相似的物体(如学校和家庭)的嵌入向量将位于更远的地方。为此,我们将使用一种流行的标记器,称为 BPE 标记器,这是一种子词标记器,正在 GPT3 等模型中使用。:前馈网络使用深度神经网络来学习两个线性层(第一层有 d_model 节点,第二层有 d_ff 节点,根据注意力论文分配值)中嵌入向量的所有特征,并且将 ReLU 激活函数应用于第一线性层的输出,为嵌入值提供非线性,并应用 dropout 以进一步避免过度拟合。

sikh_0529的博客 1951

Java 编译相关知识总结

本文聚焦于java的单文件编译、多文件编译以及.java文件到.class文件的编译过程

m0_67058607的博客 3007

基于8086微机原理数字钟计时器系统设计

*单片机设计介绍,基于8086微机原理数字钟计时器系统设计。

2201_75940997的博客 1279

手动编译java源码

因为有时候实际项目的运行环境和本地开发环境有差异,为了避免环境差异造成的运行失败,需要在实际运行环境重新编译源码,但是不可能把IDE在运行环境重装一遍,所以这个时候需要jdk手动执行编译。以下操作,全部在当前环境中已经配置了jdk以及正确的path。

玉米猫的专栏 629

10行代码搞定QMT实盘交易:手把手教你用Python自动化买卖股票(附完整源代码)

本文提供了一份详尽的QMT实盘交易教程,手把手教你使用Python构建自动化交易系统。内容涵盖环境配置、账户连接、查询与下单等核心代码,并附有完整的源代码示例,帮助开发者快速掌握从零到实盘的完整流程,实现安全可靠的股票自动化买卖。

weixin_29214335的博客 439

Lammps纳米压痕接触面积—Matlab接触面积计算(两种方法)

Lammps纳米压痕接触面积计算

Rockyoung 5449

Java代码的编译与执行过程

Java源代码通过编译器(javac)编译为字节码文件(.class)。idea中的 build 和 maven package等指令都可以编译为 .class。

一名后端程序猿 2443

MSVS C# Matlab的混合编程系列2 - 构建一个复杂(含多个M文件)的动态库:

本节我们尝试将一个有很多函数和文件的Matlab算法文件集成到C#的项目里面。

山云的专栏 2070

【死磕JVM】JVM快速入门之前戏篇

简介 Java是一门可以跨平台的语言,但是Java本身是不可以实现跨平台的,需要JVM实现跨平台。javac编译好后的class文件,在Windows、Linux、Mac等系统上,只要该系统安装对应的Java虚拟机,class文件都可以运行。达到 ”一次编译,到处运行” 的效果。 什么是JVM JVM是可以运行在Java代码的虚拟的计算机,既然是虚拟的计算机,当然也包含自己的CPU、字节码指令集、寄存器、栈、垃圾回收、堆和存储方法域,我们可以理解成JVM自己就是一套操作系统。 Java从编译到执行 Virt

牧小农 3328

杰理AC695N系列芯片 LED7数码管使用教程

杰理AC695N数码管使用摘要 本教程介绍了杰理AC695N芯片驱动LED7数码管的实现方法: 硬件配置:支持7/12/13脚三种数码管类型,详细说明了7脚数码管的标准段码定义和GPIO接线方式。 软件设置: 通过修改配置文件启用LED7功能 配置GPIO引脚映射(PORTC/PORTA组) 选择与硬件匹配的真值表 层次架构:包含硬件层、驱动层、UI层和应用层的完整设计,支持数字、字符和图标显示功能。 实现要点包括正确配置引脚类型、选择真值表,并通过UI风格设置为LED7模式。

qq_42014563的博客 1347

PNP NPN线性接近开关接线嵌入式:详细指南与示例代码

在嵌入式系统中,PNP和NPN线性接近开关是常用的传感器类型,用于检测物体的接近或离开。在嵌入式系统中,PNP和NPN线制接近开关是常用的传感器类型,用于检测物体的接近或离开。本文提供了有关PNP和NPN线性接近开关接线的详细指南,并提供了一个简单的示例代码,以帮助您在嵌入式系统中正确使用这些传感器PNP NPN 线制接近开关接线 嵌入式:详细指南与示例代码。与PNP开关不同的是,NPN线性接近开关的正极连接至系统的正极电源。与PNP开关不同的是,NPN线制接近开关的正极连接至系统的正极电源。

CyberSphinx的博客 1272

【死磕JVM】五年 整整五年了 该知道JVM加载机制了!

类加载 Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程 和那些编译时需要连接工作的语言不同,在Java语言里,类型的加载,连接和初始化过程都是在程序 运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为java应用程序提供比较高的灵活性。 当我们使用到某个类的时候,如果这个类还未从磁盘上加载到内存中,JVM就会通过三步走策略(加载、连接、初始化)来对这个类进行初始化,JVM完

牧小农 9630

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【死磕JVM】看完这篇我也会排查JVM内存过高了 就是玩儿!

前言 CPU 是时分的,操作系统里面有很多线程,每个线程的运行时间由CPU决定,CPU会分给每一个线程一个时间片,时间片是一个很短的时间长度,如果在时间片内,线程一直占有,就是100%,我们应该意识到,CPU运行速度很快(主频非常高),除非是密集型耗费CPU的运算,其他类型的任务都会在小于时间片的时间内结束。 内存过高一般有两种情况:内存溢出和内存泄露 内存溢出: 程序分配的内存超过物理机的内存大小,导致无法继续分配内存,出现OOM报错 内存泄露: 不再使用的对象一直占据着内存不释放,导致这块内存浪费掉,

牧小农 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【死磕JVM】什么是JVM调优?

想要学习JVM调优,我们必须提前知道他们的一些参数,这样才方便我们更好的去使用他们 JVM常用命令行参数 JVM的命令行参数参考: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html 1. 查看参数列表 虚拟机参数分为基本和扩展两类,在命令行中输入 JAVA_HOME\bin\java就可得到基本参数列表。 在命令行输入 JAVA_HOME\bin\java –X就可得到扩展参数列表。 2. 基本参数说明: -clien

牧小农 6539

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【死磕JVM】用Arthas排查JVM内存 真爽,java程序编译原理

下载地址:https://arthas.gitee.io/download.html 你可以下载zip的包我下载的是arthas-packaging-3.5.0-bin.zip 或者通过命令去下载 wget https://alibaba.github.io/arthas/arthas-boot.jar 使用手册 1. 快速启动 当我们下载好之后,我们直接通过命令启动就可以java -jar arthas-boot.jar,但是在此之前我们需要通过检测的代码来挂靠到Arthas上面 import java

m0_64867293的博客 1035

死磕JVM:类加载机制

java虚拟机类加载机制

三分之一程序员 1533

【死磕JVM】——-1、JVM基本结构附思维导图

JVM基本结构 从Java平台的逻辑结构上来看,我们可以从下图来了解JVM: 从上图能清晰的看到Java平台所包含的各个逻辑模块,也可以了解到JDK与JRE的区别。 对于JVM自身的物理结构,我们可以从下图鸟瞅一下: 对于Java的学习,个人认为这几个部分最重要: 1.Java代码编译和执行的整个过程。 2.JVM内存管理及垃圾回收机制。 ...

你只管努力, 990
上一篇: 【Python】学习笔记——-5.5、偏函数
下一篇: 解决Excel中上下左右键相反,且不能一格一格的滑动。
白衣染霜陈
博客等级 码龄22年 682粉丝 338原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值