编译其本质是将一种语言规范转换成另一种语言规范,即将Java语言规范转换为JVM虚拟机语言规范。结果就是.java文件到.class文件。

对于C/C++编译直接将高级语言转换为机器语言,Java语言不是采用这种策略,而是将高级语言编译成一种中间态的语言--与平台无关,其执行

过程是依靠对应平台的JVM在执行时刻逐条的将字节码指令转换为对应的机器语言,为了提高转换速度存在JIT技术。

二、javac编译的具体过程

  源码-->Token流-->语法树-->注释语法树-->字节码文件

  词法分析:扫描源程序的字符流,按照源程序语言的的词法规则选取各类单词符号,产生用于语法分析的记号序列。同时创建符号表,将

所有的标识符记录在符号表中。

  语法分析:是编译过程的核心,依据源程序的语法规则,组织上一步产生的记号序列。形成一个按照特定语法规则组织的结构---通常是语法

树的形式体现。

  语义分析:主要包括两部分的内容,语义检查,其就是对上步产生的语法树进行检查,包含类型检查、控制流检查、唯一性检查等。另一个

任务就是对符号表的管理。

  代码生成器:将处理过的语法树组织成Class文件的格式。

  符号表的作用:记录源代码中使用的标识符,收集每个表示符的各种属性信息。符号表的维护是贯穿整个编译过程的。

  错误处理:编译过程中的每一步都可能产生错误,编译器要能对这些错误给予处理。

三、不同种类Java语言编译器

根据编译器的种类不同,编译器编译的过程可能存在很大的不同,商用的JVM一般具有前端编译器和解释器。

  前端编译器:直接将源文件转化为字节码文件

  即时编译器:将源码转换为字节码,在将字节码转换为机器码。

  运行前编译:直接将源码转换为指定平台的机器码

Java源代码编译过程的更多相关文章

  1. 【转】Java代码编译过程简述

    转载:https://blog.csdn.net/fuzhongmin05/article/details/54880257. 代码编译是由Javac编译器来完成,流程如下图1所示: 图1 Javac ...

  2. JAVA 程序编译过程;编辑器,编译器和解释器

    最基本的软件工具包括,编辑器,编译器,解释器; 编译器:编译器就是将一种编程语言代码翻译成另一种语言的等效代码程序. 解释器:解释器将编译和执行交织在一起,即编译一部分代码后执行该部分代码,然后再编译 ...

  3. Android源代码编译过程及指令

    编译Android源代码分为两种情况: 1. 完整编译源码: ./mk_aliphone.sh --> 完整编译脚本 --> 6735  输入对应的编号 --> userdebug ...

  4. 3DSlicer源代码编译过程vs2008+windows xp [转]

    一 下载QT源代码编译 1.  简述   在 Windows2000/xp/vista 下,安装 VS2008, QT 4.7.2 :并在 VS2008上建立 QT 的集成开发环境,利用 VS2008 ...

  5. OpenSift源代码编译过程记录

    本文记录了在CentOS6.5上编译Sift的开源实现OpenSift的编译过程,同一时候记录了编译过程中的几个问题. sift的理论已经有非常多了,以下会给出链接: 1.Requirements a ...

  6. java的编译过程

    用记事本编写两个java文件 第一个Employee.java import java.io.*; public class Employee{ String name; int age; Strin ...

  7. java代码编译过程

    简单随笔 java程序需要先编译成class文件然后才能执行,由于是编程成立机器代码,虚拟机加载内存的时候更快的执行. java文件编译成class文件步骤如下: 1)词法分析,检查每一个关键字单词是 ...

  8. Linux1.0源代码编译过程

    根据源代码包中的readme文件及http://chfj007.blog.163.com/blog/static/173145044201191195856806/?suggestedreading& ...

  9. Mariadb源代码编译过程

    从微博上看到有人提及Mariadb,搜索了一下.找到地址https://mariadb.org/,这是mysql的一个分支,由原作者维护.意在与oracle分庭抗礼,避免oracle将来毕源. 眼下版 ...

随机推荐

  1. Python参数输入模块-optparse

    废话: 模块名是optparse, 很多人打成optparser.以至于我一直导入导入不了.搞的不知所以. 模块的使用: import optparse #usage 定义的是使用方法,%prog 表 ...

  2. html meta标签作用

    1.概要 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他web服务. 必要属性: conten ...

  3. Linux实际用户(组)ID,有效用户(组)ID,设置用户(组)ID

    实际用户(组)ID: 标识用户是谁,这两个字段在登录时取自口令文件中的登录项. 有效用户(组)ID: 决定了对文件的访问权限,通常有效用户(组)ID等于实际用户(组)ID,谁运行有效ID就等于谁的实际 ...

  4. ThinkPHP5 正则验证中有“|”时提示“规则错误”的解决方案

    正则规则中有“|”时,会引起解析错误: 'regex:\d{3,4}[\s,-]?\d{7,8}|1[3,4,5,8]\d[\s,-]?\d{4}[\s,-]?\d{4}' 使用数组语法可以解决: [ ...

  5. sicily 1063. Who's the Boss

    Time Limit: 1sec    Memory Limit:32MB  Description Several surveys indicate that the taller you are, ...

  6. 2017多校第7场 HDU 6121 Build a tree K叉树,思维

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6121 题意:一个n个点的完全k叉树,求每个节点的size的异或和. 解法:容易发现,考虑根的所有孩子, ...

  7. 2015多校第6场 HDU 5360 Hiking 贪心,优先队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意:给定n个人,现在要邀请这些人去远足,但每个人同意邀请的条件是当前已经同意去远足的人数c必须 ...

  8. python 结束练习

    1.文件操作有哪些模式?请简述各模式的作用 r 只读模式 r+ 读写 rb w 只写模式 w+ 写读 wb x 只写模式 x+ 写读 xb a 追加模式 a+ 写读 ab 2.s = '**hello ...

  9. python 作业

    Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与 ...

  10. 【mongo】用户添加、导入数据库、连接VUE

    添加用户 1.安装mongo时最好用apt-get install  因为这样可以省去很多麻烦,比如一些环境变量,还有一些文档路径等等的问题 2.确认一下自己的mongodb和mongodb-clie ...