当前位置: 首页 > news >正文

临沂市网站建设_网站建设公司_色彩搭配_seo优化

网站建设步骤 优帮云,天水市秦州区建设局网站,wordpress增加用户组,免费的ftp网站无论什么语言写的代码#xff0c;其到最后都是通过机器码运行的#xff0c;无一例外。那么对于 Java 语言来说#xff0c;其从源代码到机器码#xff0c;这中间到底发生了什么呢#xff1f;这就是今天我们要聊的。如下图所示#xff0c;编译器可以分为#xff1a;前端编…无论什么语言写的代码其到最后都是通过机器码运行的无一例外。那么对于 Java 语言来说其从源代码到机器码这中间到底发生了什么呢这就是今天我们要聊的。如下图所示编译器可以分为前端编译器、JIT 编译器和AOT编译器。下面我们逐个讲解。前端编译器源代码到字节码对于 Java 虚拟机来说其实际输入的是字节码文件而不是 Java 文件。那么对于 Java 语言而言其实怎么将 Java 代码转化成字节码文件的呢我们知道在 JDK 的安装目录里有一个 javac 工具就是它将 Java 代码翻译成字节码这个工具我们叫做编译器。相对于后面要讲的其他编译器其因为处于编译的前期因此又被称为前端编译器。我们运行 javac 命令的过程其实就是 javac 编译器解析 Java 源代码并生成字节码文件的过程。说白了其实就是使用 javac 编译器把 Java 语言规范转化为字节码语言规范。javac 编译器的处理过程可以分为下面四个阶段第一个阶段词法、语法分析。在这个阶段JVM 会对源代码的字符进行一次扫描最终生成一个抽象的语法树。简单地说在这个阶段 JVM 会搞懂我们的代码到底想要干嘛。就像我们分析一个句子一样我们会对句子划分主谓宾弄清楚这个句子要表达的意思一样。第二个阶段填充符号表。我们知道类之间是会互相引用的但在编译阶段我们无法确定其具体的地址所以我们会使用一个符号来替代。在这个阶段做的就是类似的事情即对抽象的类或接口进行符号填充。等到类加载阶段JVM 会将符号替换成具体的内存地址。第三个阶段注解处理。我们知道 Java 是支持注解的因此在这个阶段会对注解进行分析根据注解的作用将其还原成具体的指令集。第四个阶段分析与字节码生成。到了这个阶段JVM 便会根据上面几个阶段分析出来的结果进行字节码的生成最终输出为 class 文件。我们一般称 javac 编译器为前端编译器因为其发生在整个编译的前期。常见的前端编译器有 Sun 的 javacEclipse JDT 的增量式编译器(ECJ)。JIT编译器从字节码到机器码当源代码转化为字节码之后其实要运行程序有两种选择。一种是使用 Java 解释器解释执行字节码另一种则是使用 JIT 编译器将字节码转化为本地机器代码。这两种方式的区别在于前者启动速度快但运行速度慢而后者启动速度慢但运行速度快。至于为什么会这样其原因很简单。因为解释器不需要像 JIT 编译器一样将所有字节码都转化为机器码自然就少去了优化的时间。而当 JIT 编译器完成第一次编译后其会将字节码对应的机器码保存下来下次可以直接使用。而我们知道机器码的运行效率肯定是高于 Java 解释器的。所以在实际情况中为了运行速度以及效率我们通常采用两者相结合的方式进行 Java 代码的编译执行。在 HotSpot 虚拟机内置了两个即时编译器分别称为 Client Compiler 和Server Compiler。这两种不同的编译器衍生出两种不同的编译模式我们分别称之为C1 编译模式C2 编译模式。注意现在许多人习惯上将 Client Compiler 称为 C1 编译器将 Server Compiler 称为 C2 编译器但在 Oracle 官方文档中将其描述为 compiler mode(编译模式)。所以说 C1 编译器、C2 编译器只是我们自己的习惯性称呼并不是官方的说法。这点需要特别注意。那么到底应该选择 C1 编译模式还是 C2 编译模式呢实际上对于 HotSpot 虚拟机来说其一共有三种运行模式可选分别是混合模式(Mixed Mode) 。即 C1 和 C2 两种模式混合起来使用这是默认的运行模式。如果你想单独使用 C1 模式或 C2 模式使用 -client 或 -server 打开即可。解释模式(Interpreted Mode)。即所有代码都解释执行使用 -Xint 参数可以打开这个模式。编译模式(Compiled Mode)。 此模式优先采用编译但是无法编译时也会解释执行使用 -Xcomp 打开这种模式。在命令行中输入 java -version 可以看到我机器上的虚拟机使用 Mixed Mode 运行模式。写到这里我们了解了从 Java 源代码到字节码再从字节码到机器码的全过程。本来到这里就应该结束了但在我们 Java 中还有一个 AOT 编译器它能直接将源代码转化为机器码。AOT编译器源代码到机器码AOT 编译器的基本思想是在程序执行前生成 Java 方法的本地代码以便在程序运行时直接使用本地代码。但是 Java 语言本身的动态特性带来了额外的复杂性影响了 Java 程序静态编译代码的质量。例如 Java 语言中的动态类加载因为 AOT 是在程序运行前编译的所以无法获知这一信息所以会导致一些问题的产生。类似的问题还有很多这里就不一一举例了。总的来说AOT 编译器从编译质量上来看肯定比不上 JIT 编译器。其存在的目的在于避免 JIT 编译器的运行时性能消耗或内存消耗或者避免解释程序的早期性能开销。在运行速度上来说AOT 编译器编译出来的代码比 JIT 编译出来的慢但是比解释执行的快。而编译时间上AOT 也是一个适中的速度。所以说AOT 编译器的存在是 JVM 牺牲质量换取性能的一种策略。就如 JVM 其运行模式中选择 Mixed 混合模式一样使用 C1 编译模式只进行简单的优化而 C2 编译模式则进行较为激进的优化。充分利用两种模式的优点从而达到最优的运行效率。总结在 JVM 中有三个非常重要的编译器它们分别是前端编译器、JIT 编译器、AOT 编译器。前端编译器最常见的就是我们的 javac 编译器其将 Java 源代码编译为 Java 字节码文件。JIT 即时编译器最常见的是 HotSpot 虚拟机中的 Client Compiler 和 Server Compiler其将 Java 字节码编译为本地机器代码。而 AOT 编译器则能将源代码直接编译为本地机器码。这三种编译器的编译速度和编译质量如下编译速度上解释执行 AOT 编译器 JIT 编译器。编译质量上JIT 编译器 AOT 编译器 解释执行。而在 JVM 中通过这几种不同方式的配合使得 JVM 的编译质量和运行速度达到最优的状态。原文https://www.cnblogs.com/zuotongbin/p/11715396.html
http://www.ihoyoo.com/news/91102.html

相关文章:

  • 全网网站建设设计做网站费用会计分录怎么做
  • 个人学做网站对外网站建设情况汇报
  • 义乌商城网站开发有经验的手机网站建设
  • 网站功能报价明细表十大网站建设品牌
  • 自助式网站建设 济南外贸建站 厦门
  • 东莞齐诺做网站找家里做的工作到什么网站
  • 思途旅游网站建设深汕特别合作区属于哪个市
  • django企业网站开发实例公司备案 网站主办者名称
  • 深圳网站建设 排行榜新建的网站多长时间在百度搜到
  • 天津网站建设教程乐度网上购物网站建设方案
  • 鹤壁做网站的网络公司wordpress段子模板
  • 深圳模板网站建设设计公司中国建设银行官网站保本理财
  • 东莞网站推广服务iis新建网站
  • 网站模板怎么做wordpress 爱奇艺插件下载
  • 网站建设 聊城信息港网站服务器空间不足
  • 山东系统建站怎么用建设团队网站
  • 三门峡市建设局网站免费代理
  • 重庆旅游网站建设规划企业网站优化做什么
  • 大沥网站设计济南网站建设及推广
  • 免费优化网站的软件uniapp开发者中心
  • 怎么做网站横幅平面设计公司工作室
  • 浙江诚峰建设工程有限公司网站wordpress登录后回到指定的页面
  • 建设招标网官方网站电脑版集团网站建设多少钱
  • 如何在网站上做网盘深圳沙井网站建设
  • 浙江巨鑫建设有限公司网站网站建设开发成本
  • wordpress 可以回复的表单插件北京优化服务
  • 科技打破垄断全球的霸权安徽seo网站
  • 十元精品店做网站网站百度收录突然消失了
  • 深圳网站设计成功刻商洛市建设工程造价管理站网站
  • 优秀作文大全网站专业维护网站的公司