侧边栏壁纸
博主头像
晓果冻博主等级

一个热爱生活的95后精神小伙

  • 累计撰写 120 篇文章
  • 累计创建 14 个标签
  • 累计收到 56 条评论

目 录CONTENT

文章目录

JVM-编译过程学习

晓果冻
2022-04-06 / 0 评论 / 2 点赞 / 42 阅读 / 549 字
温馨提示:
本文最后更新于 2022-04-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

JVM-编译过程学习

词法分析
  • 将源代码的字符流转变为标记集合。关键字、变量名、字面量、运算符都可以称为标记。
    • int a = b+2; int、a、=、b、+、26个标记。
  • 生成Token流,例如上面的int就是一个Token,不可再拆分。
语法分析
  • 根据Token序列构造抽象语法树。
  • 语法树的每一个节点都代表着程序代码中的一个语法结构
    • 如:包、类型、修饰符、运算符、接口、返回值甚至代码注释都可以是一个语法结构。
填充符号表
  • 由一组符号地址和符号信息构成的表格叫做符号表。(可以用哈希表的K-V来理解)。
    • 在语义分析阶段:符号表所登记的内容将用于语义检查和产生中间代码。
    • 在目标代码生成阶段:当对符号名进行地址分配时,符号表是地址分配的依据。
语义分析
  • 对语法树结构上的源程序进行上下文有关性质的审查。
  • 解语法糖。
字节码生成
  • 把前面各个步骤所生成的信息(语法树、符号表)转化成字节码写到磁盘中,编译器还进行了少量的代码添加和转换工作。
  • 如变量初始化、调用父类的实例构造器、字符串的+操作替换为StringBuffer和StringBuilder等操作。
  • 最后由com.tools.javac.jvm.ClassWriter类的writeClass()方法输出字节码,生成最终的Class文件。

语法糖

自动装箱、拆箱
遍历循环

image-20220406181543891

2

评论区