java编译期、运行期、字节码和机器码自整理

1.编译期:

词法分析→语法分析→语义分析→代码生成。

词法分析:

       读入字符→组成词素→生成词法单元序列→分析序列。

词法分析:

       扫描程序→获取源代码(几号形式)→语法分析(定义程序结构元素及其关系)→绘制语法树。

语义分析:

      分析静态语义(声明和类型检查)→添加额外信息(“注释”或“装饰”到语法树,属性添加到符号表)。

代码生成:

      生成中间代码→生成目标代码。

2.运行期:

加载→连接(验证→准备→解析)→初始化→使用→卸载

加载:

     (获取或动态编译出).class文件的二进制数据→读入内存(运行时的数据区的方法区内)→在堆区创建java.lang.Class对象(封装类的方法区内数据结构)。

验证:

      类文件结构检查(固定格式)→语义检查(语法规定)→字节码验证(静态方法,实例对象)→二进制兼容性的验证(引用类之间协调一致)。

准备:

      (jvm对类的静态变量)分配内存→设置初始值。

解析:

       (jvm把二进制数据的)符号引用→直接引用。

        归纳:编译时不知道实际地址,是符号引用;执行时是实际地址,是直接引用。

初始化:

        jvm执行初始化语句→为静态变量赋予初始值。

        位置:静态变量声明处;静态代码块。

使用:

        程序运行过程。

卸载:

        涉及GC。无引用对象被回收。

3.机器码:

        概念:学名机器语言指令,也被称为原生码。

        机器码是CPU可以直接解读的数据,也是执行最快的指令。由0和1构成,直观性差晦涩难懂,指令种类非常多,出错概率大,编写时间远远超过执行时间。一般是计算机研发工程师直接接触和使用,不太常见于其他开发领域。

4.字节码:

        概念:是一组包含执行程序,由op代码和数据对组成的二进制文件。

        字节码是一种中间状态的二进制代码。它比机器码更为抽象,需要直译器转译后才能生成机器码的中间代码。

        字节码与平台无关,它是通过编译器和虚拟机实现的。编译器将源码编译成字节码,虚拟机将字节码转译为所在平台需要的执行代码(机器码)。典型应用为Java bytecode。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值