举个例子,当我们作为开发人员,在电脑上拼死拼活写了一个版本的代码,然后将代码提交到git上去,当我们用jekins或其他工具将代码从git上clone下来,使用mvn package,或者mvn intall打包的过程就叫编译期。是指将java代码编译为机器识别的字节码文件的过程。

在编译期,将java代码翻译为字节码文件的过程经过了四个步骤,词法分析,语法分析,语义分析,代码生成四个步骤:

词法分析

词法分析是编译的第一阶段。词法分析器的主要任务是读入源程序的输入字符,将它们组成词素,生成并输出一个词法单元序列,这个词法单元序列被输出到语法分析器进行语法分析。

语法分析

语法分析程序从扫描程序中获取记号形式的源代码,并完成定义程序结构的语法分析 (syntax analysis ),这与自然语言中句子的语法分析类似。语法分析定义了程序的结构元素及其关系。通常将语法分析的结果表示为语法树。

语义分析

程序的语义就是它的“意思”,它与语法或结构不同。程序的语义确定程序的运行,但是大多数的程序设计语言都具有在执行之前被确定而不易由语法表示和由分析程序分析的特征。这些特征被称作静态语义(static semantic),而语义分析程序的任务就是分析这样的语义,语义具有只有在程序执行时才能确定的特性,由于编译器不能执行程序,所以它不能由编译器来确定)。一般的程序设计语言的典型静态语义包括声明和类型检查。由语义分析程序计算的额外信息,它们通常是作为注释或“装 饰”增加到树中(还可将属性添加到符号表中)。

代码生成

代码生成器得到中间代码,并生成目标代码

java运行期

程序的运行过程就是运行期。

从jvm加载字节码文件,到使用到最后的卸载过程,都是属于运行期的范畴

加载

类的.class文件中的二进制数据读到内存中,将其放在运时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构

加载.class文件的方式:

从本地系统上直接加载

通过网络下载.class文件

从zip,jar等归档文件中加载.class文件

将java源文件动态编译为.class文件

验证

类文件的结构检查 确保类文件总符合ava类文件的固定格式

语义检查 确保类本身符合java语言的语法规定

字节码验证 确保字节码流可以被java虚拟机安全的执行。(静态方法,实例对象)

二进制兼容性的验证 引用类之间协调一致。

准备

java虚拟机对类的静态变量分配内存,并设置初始值。如static int此时为0。

解析

java虚拟机会把类的二进制数据中的符号引用代替为直接引用

初始化

java虚拟机执行类的初始化语句,为类的静态变量赋予初始值。

两种初始化方式:

在静态变量的声明处进行初始化

在静态代码块中进行初始化。

使用

程序运行过程

卸载

垃圾回收机制相关。对无引用的对象进行回收

编译期java_java编译期和运行期相关推荐

  1. java编译异常和运行时异常_浅谈异常结构图、编译期异常和运行期异常的区别...

    异常处理一般有2种方式,要么捕获异常try-catch,要么抛出异常throws 如果一个方法后面抛出一个运行时期异常(throws RuntimeException),调用者无须处理 如果一个方法后 ...

  2. class反编译成java_Java黑科技之源:JVMTI完全解读

    专注于Java领域优质技术,欢迎关注 来自:java漫游 Java生态中有一些非常规的技术,它们能达到一些特别的效果.这些技术的实现原理不去深究的话一般并不是广为人知.这种技术通常被称为黑科技.而这些 ...

  3. 即时编译和提前编译_即时编译说明

    即时编译和提前编译 Just-in-time compilation is a method for improving the performance of interpreted programs ...

  4. ASP.NET Core Razor 视图预编译、动态编译

    0x01 前言 ASP.NET Core在默认发布情况下,会启动预编译将试图编译成xx.Views.dll,也许在视图中打算修改一处很细小的地方我们需要再重新编译视图进行发布.下面我将从 ASP.NE ...

  5. netcore 编译 html dll,ASP.NET Core Razor 视图预编译、动态编译

    0x01 前言 ASP.NET Core在默认发布情况下,会启动预编译将试图编译成xx.Views.dll,也许在视图中打算修改一处很细小的地方我们需要再重新编译视图进行发布.下面我将从 ASP.NE ...

  6. 我们不一样!流量卡的合约期和优惠期你搞清楚了吗?

    我们在网上了解流量卡详情时,会同时看到优惠期和合约期,可能有些朋友比较懵,优惠期和合约期不一样吗?其实,他们完全不一样! 首先,你要知道合约期≠优惠期. 所谓合约期,就是一份和运营商的约定,约定在这个 ...

  7. 《编译与反编译技术实战 》一2.3 编译器的设计与实现概述

    本节书摘来自华章出版社<编译与反编译技术实战 >一书中的第2章,第2.3节,庞建民 主编 ,刘晓楠 陶红伟 岳 峰 戴超 编著,更多章节内容可以访问云栖社区"华章计算机" ...

  8. xcode修改时间后就要重新编译_iOS 微信编译速度优化分享

    前言 岁月真是个养猪场,这几年,人胖了,微信代码也翻了.记得 14 年转岗来微信时,用自己笔记本编译微信工程才十来分钟.如今用公司配的 17 年款 27-inch iMac 编译要接近半小时:偶然间更 ...

  9. 《编译与反编译技术实战》——第1章 实践的环境与工具 1.1 实践环境概述

    本节书摘来自华章计算机<编译与反编译技术实战>一书中的第1章,第1.1节,作者 刘晓楠 陶红伟 岳峰 戴超,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第1 ...

最新文章

  1. 深度学习目标检测详细解析以及Mask R-CNN示例
  2. 40.lombok在IntelliJ IDEA下的使用
  3. Flume整合SparkStreaming出现UnsupportedClassVersionError: org/apache/spark/streaming/flume/sink/SparkFlum
  4. sqlite 的几点见解
  5. Mysql保存是事件驱动吗_【CHRIS RICHARDSON 微服务系列】事件驱动的数据管理-5
  6. python对键和值有没有类型限制_第026课:词典:索引不易使用时2,讲,字典,当,不好...
  7. 应用zip压缩的javascript以及Egret H5游戏实战
  8. 系统学习深度学习(七)--主流深度学习开源框架对比
  9. 手把手教你快速解除vivo手机高通系列屏幕锁(附短接拆机小视频)
  10. UEditor快捷键
  11. weboffice集成
  12. 微信小程序 组件传值(二) triggerEvent 子传父
  13. oeasy教您玩转vim - 42 - # 剪切进入
  14. 感恩节:美国人的春节
  15. MongoDB find查询语句详解
  16. 30 行代码实现蚂蚁森林自动收能量(附源码)
  17. P15-Windows与网络基础-NTFS权限规则
  18. json to excel java_java解析json生成excel
  19. sqlyog修改背景颜色成护眼色
  20. apche的AB测试详解

热门文章

  1. 用行为树的方式思考问题
  2. Hue开发指南 - 提交 Spark 程序
  3. HUE 打开 WorkFlow异常 Operation category READ is not supported in state standby
  4. 面向B端算法实时业务支撑的工程实践
  5. 云上安全保护伞--SLS威胁情报集成实战
  6. 双11“新贵”红星美凯龙:数据中台充分给足转型马力
  7. 从 Storm 迁移到 Flink,美团外卖实时数仓建设实践
  8. MaxCompute规格详解 让您花更低的成本获得更高的业务价值
  9. 基于OOS批量修改资源标签值
  10. 路径规划之 A* 算法