美文网首页
【笔记】深入---程序编译期编译与优化

【笔记】深入---程序编译期编译与优化

作者: 张航_8ee7 | 来源:发表于2018-01-29 11:59 被阅读0次

java 语言的编译期有3 种

【1】 将.java 编译成 .class 也成为  编译器的前端 ,比如就javac 

【2】 将 字节码转换成 机器码。 编译器的后端。比如jit。 (just in  time compiler)

【3】静态提前编译器。 直接把.java 转化为 机器码。aot(ahead  of  time compiler)

javac 编译器

3 个过程。

【1】 解析与填充符号表。包含 a 词法、语法分析  b 填充符号表 

a   将 源码的字符流装变为 token(标记) 集合,单个字符是编写的最小元素,而标记则是编译过程的最小元素,比如 关键字、变量名、字面量、运算符都是标记,比如 int a= b+c 有 6个标记  分别是  int 、 a、 = 、b、 + 、c。从而生成了 语法树。

b 由一组符号地址和符号信息构成的hash结构。用于 语义检查和产生中间代码。

【2】 注解处理器。

一个插件,可以修改、读取、添加抽象数的任意结构。

【3】语义分析和 字节码生成。

以上之后生成的抽象语法数,可以保证是源程序的抽象,但是无法保证是否符合逻辑。语义分析来保证其符合逻辑。

【标注检查】:检查包括,变量是否被声明,变量的类型是否满足赋值运算。

【数据及控制流分析】对逻辑下文进一步验证。检查包括:方法是否有返回值,所有异常是否都被处理。

生成 字节码。

java  语法糖

泛型

java 里的泛型 是一个伪泛型,它不像c#的泛型一样,在编译的时候生成不同的编码。比如,List<String> 和 List<Integer>,在 c# 里 编译后生成的是两个对象,而在java 里生成的都是 List。用了 擦除法,将参数列表省去了。

自动装箱 和 拆箱 遍历循环

条件编译

相关文章

  • 【笔记】深入---程序编译期编译与优化

    java 语言的编译期有3 种 【1】 将.java 编译成 .class 也成为 编译器的前端 ,比如就java...

  • 深入理解Java虚拟机读书笔记(三)

    程序编译与代码优化 1. 编译期优化 1.1 概述 有三种编译: 1.前端编译器,javac,把.java文件转化...

  • 要点提炼| 理解JVM之程序编译&代码优化

    本篇将介绍程序编译时期的代码优化手段,分成两个阶段: 概述 早期(编译期)优化 晚期(运行期)优化 1.概述 a....

  • 9.运行期优化

    运行期优化 本章讲述针对《008.编译期优化.md》中第二类编译过程的优化。 1. 概述 Java程序最初是通过解...

  • C语言跨平台移植

    C语言编译流程: C源程序-->预编译处理(.c)-->编译、优化程序(.s、.asm)-->汇编程序(.obj、...

  • 晚期(运行期)优化

    HotSpot的即时编译器 解释器与编译器 编译对象与触发条件 编译过程 编译优化技术 如果还对其他的经典编译优化...

  • 深入JVM:(十二)编译期优化

    Java语言的“编译期”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器(其实叫“编译器的前端”更准确...

  • 高级Java必看的10本书

    1、深入理解Java虚拟机:JVM高级特性与最佳实践 本书共分为五大部分,围绕内存管理、执行子系统、程序编译与优化...

  • 程序编译与代码优化

    概述 编译器是一段“不确定”的操作过程 编译器类型 前端编译器:将Java代码编译为class字节码 代表:sun...

  • 程序编译与代码优化

    早期(编译期)优化 编译器类型 前端编译器:把java文件变成class文件;比如我们的idea,javac等。(...

网友评论

      本文标题:【笔记】深入---程序编译期编译与优化

      本文链接:https://www.haomeiwen.com/subject/mvkxzxtx.html