Javac编译过程及优化代码(清晰易懂)

Java程序员编写的程序

进入Javac编译器
前端编译器:把*.java文件转变成*.class文件的过程;
编译期优化:降低程序员的编码复杂度、提高编码效率。
编译过程大致分为一个准备过程和三个处理过程:
1.准备过程:
初始化插入式注解处理器。
2.解析与填充符号表过程,包括:
词法、语法分析。将源代码的字符流转变为标记集合,构造出抽象语法树。
词法分析是将源代码的字符流转变成标记集合的过程,单个字符是程序编写时的最小单位,但标记才是编译时的最小元素。
语法分析是根据标记序列构造抽象语法树的过程。(抽象语法树是一种用来描述程序代码语法结构的树形表示方式)
填充符号表。产生符号地址和符号信息。
符号表是由一组符号地址和符号信息构成的数据结构。
3.插入式注解处理器的注解处理过程:
插入式注解处理过器的执行阶段。
4.分析与字节码生成过程:
标注检查步骤要检查的内容诸如变量使用前是否已被声明,变量与赋值之间的数据类型是否匹配。在标注检查中还会顺便进行一个称为常量折叠的优化。
数据流分析和控制流分析是对程序上下文逻辑的进一步验证,它可以检验出诸如程序局部变量使用前是否有赋值、方法的每条路径是否都用返回值、是否所有的受查异常都被正确处理了等问题(编译期的数据流分析与控制流分析和类加载时的数据流分析与控制流分析的目的可以看作是一致的,但是校验的范围会有所区别)。
解语法糖,语法糖指计算机语言中添加的某种语法,这种语法对语言的编译结果和功能并没有什么实际影响,但是可以方便程序员使用该语言。语法糖可以减少代码量,增加程序的可读性,从而减少程序代码出错的机会。
字节码生成不仅仅是把前面生成的信息写在磁盘中,编译器还会进行少量的代码添加和转换工作。(添加init()和clinit():代码收敛编译器会把语句块(对于实例构造器而言是{}块,对于类构造器而言是static{}),变量初始化(实例变量和类变量),调用父类的实例构造器(仅实例构造器))。
即时编译器:运行期把字节码转变成本地机器码的过程;
运行期优化:支撑了程序执行效率的不断提升。
提前编译器:直接把程序编译成与目标机器指令集相关的二进制代码的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来回答你的问题。 首先,我需要声明一下,生成随机整数和多线程排序的具体实现方式可能涉及到一些算法和代码细节,我尽量以通俗易懂的方式来回答这个问题。 其次,关于在Linux下编写、编译、运行、调试程序过程,这个问题比较宽泛,我需要知道你具体使用的是哪种编程语言和开发工具,才能给出具体的答案。不过,我可以大致介绍一下在Linux下编写、编译、运行、调试程序的一般流程。 1. 编写代码。在Linux下,你可以选择使用各种编程语言进行开发,比如C、C++、Java、Python等等。你需要使用一个文本编辑器来编写代码,比如Vim、Emacs、Sublime Text等等。 2. 编译代码。一般来说,你需要使用编译器将代码编译成可执行文件,比如使用gcc编译C/C++代码、使用javac编译Java代码、使用Python解释器来运行Python代码等等。 3. 运行程序。在Linux下,你可以直接在终端中输入可执行文件的路径来运行程序。 4. 调试程序。如果程序出现了问题,你可以使用调试器来进行调试,比如gdb调试C/C++程序、jdb调试Java程序等等。 下面是Linux下使用gcc编译C语言程序的一个例子,假设我们已经编写好了一个名为sort.c的程序,用于对随机生成的整数进行排序。 1. 打开终端,使用cd命令切换到sort.c所在的目录。 2. 输入以下命令来编译程序: ``` gcc -o sort sort.c -pthread ``` 这个命令将sort.c文件编译成可执行文件sort,并且使用了-pthread选项来启用多线程支持。 3. 输入以下命令来运行程序: ``` ./sort ``` 这个命令将运行可执行文件sort。 4. 如果程序出现了问题,你可以使用以下命令来启动gdb调试器: ``` gdb sort ``` 这个命令将启动gdb调试器,并且将sort作为参数传入。 接下来,你可以使用gdb命令来进行调试。 下面是一个截图,展示了在Linux下使用gcc编译、运行、调试C语言程序过程: ![Linux下编写、编译、运行、调试程序过程](https://img-blog.csdnimg.cn/20210518114337974.png) 希望这个回答能够对你有所帮助,如果你还有其他问题,欢迎随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值