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

贵阳网站制作 建设长沙网站建设+个人

贵阳网站制作 建设,长沙网站建设+个人,lnmp wordpress,鄠邑建站 网站建设一、前端编译#xff1a;java设计之初就是强调跨平台#xff0c;通过javac将源文件编译成于平台无关的class文件#xff0c; 它定义了执行 Java 程序所需的所有信息#xff08;许多Java语法糖#xff0c;是在这个阶段完成的#xff0c;不依赖虚拟机#xff…一、前端编译java设计之初就是强调跨平台通过javac将源文件编译成于平台无关的class文件 它定义了执行 Java 程序所需的所有信息许多Java语法糖是在这个阶段完成的不依赖虚拟机同时jvm提供了运行时环境JRE——实现了所有特定的本地平台支持例如Linux 的 Intel x86 平台、Sun Solaris 平台和 AIX ...的jre。 Java 程序一个重要部分是字节码序列它描述了 Java 类中每个方法所执行的操作。字节码使用一个理论上无限大的操作数堆栈来描述计算操作数堆栈的大小是有限制但程序极少超出该限制此外JVM 提供了安全性检查超出后进行通知在操作数堆栈上执行的各种操作计算都独立于所有本地处理器的指令集Java 虚拟机JVM规范定义了这些字节码的执行任何特定本地平台的JRE 都必须遵守 JVM 规范。 因为基于堆栈的本地平台很少Intel X87 浮点数协处理器是一个明显的例外所以大多数本地平台不能直接执行 Java 字节码。为了解决这个问题早期的 JRE 通过解释字节码来执行 Java 程序。即 JVM 在一个循环中重复操作获取待执行的下一个字节码解码从操作数堆栈获取所需的操作数按照 JVM 规范执行操作将结果写回堆栈。这一过程称作前端编译。优点简单很方便跨平台JRE 开发人员只需编写代码来处理每种字节码即可并且因为用于描述操作的字节码少于 255 个所以实现的成本比较低缺点性能比较差因为在运行代码时每次都要重复的解释二、JIT编译即时编译、动态编译java设计初衷是使用解释的方式支持应用程序的可移植性目标早期java运行时提供的性能远低于C/C之类的编译语言这类语言尽管性能更高但生成的代码只能在指定平台上执行但在过去的十几年中Java 运行时供应商开发了一些复杂的动态编译器也称即时编译Just-in-timeJIT极大的提升了java运行效率。JIT是在java程序运行时将最频繁执行的代码hot spot编译成本地代码接下来这些hot spot code直接通过机器码执行省去了重复解释。JIT执行原理如下图1、挑战1JIT这种技术既保证了程序可移植性又提升了运行效率但仍会带来运行时性能的下降因为在程序执行时进行编译所以编译代码的时间将计入程序的执行时间。任何编写过大型 C 或 C 程序的人都知道编译过程往往较慢。与之相对应C是在运行前编译成本地代码但这牺牲了移植性。2Java 支持动态加载类这对JIT的设计有着重要的影响。如果待编译代码引用的其他类还没有加载怎么办比如一个方法需要读取某个尚未加载的类的静态字段值。Java 语言要求第一次执行类引用时加载这个类并将其解析到当前的 JVM 中。直到第一次执行时才解析引用这意味着没有地址可供从中加载该静态字段。编译器如何处理这种可能性编译器生成一些代码用于在没有加载类时加载并解析类。类一旦被解析就会以一种线程安全的方式修改原始代码位置以便直接访问静态字段的地址因为此时已获知该地址。2、优缺点1优点Java的动态编译有些时候能够比静态编译语言生成更好的本地代码。现代的 JIT 编译器常常向生成的代码中插入挂钩以收集有关程序行为的信息以便如果要选择方法进行重编译就可以更好地优化动态行为。举一个例子一个虚方法调用需要查看接收方对象的类调用以便找出哪个实际目标实现了接收方对象的虚方法。研究表明大多数虚调用只有一个目标对应于所有的接收方对象而 JIT 编译器可以为直接调用生成比虚调用更有效率的代码。通过分析代码编译后类层次结构的状态JIT 编译器可以为虚调用找到一个目标方法并且生成直接调用目标方法的代码而不是执行较慢的虚调用。当然如果类层次结构发生变化并且出现另外的目标方法则 JIT 编译器可以更正最初生成的代码以便执行虚调用。在实践中很少需要作出这些更正。另外由于可能需要作出此类更正因此静态地执行这种优化非常麻烦。总之对于大量的 Java 应用程序来说动态编译已经弥补了与C 之类语言的静态本地编译性能之间的差距在某些情况下甚至超过了后者的性能。2缺点由于识别、编译hot spot code 都需要一定的时间所以应用程序通常要经历一个准备过程。其次JIt在运行时也会带来一定的性能损失有些应用可能无法容忍。三、AOT编译静态编译由于动态编译技术的多项改进在很多应用程序中现代的 JIT 编译器可以产生与 C 或 C 静态编译相当的应用程序性能。但是仍然有很多软件开发人员认为动态编译可能严重干扰程序操作所以有另外一些开发人员强烈呼吁对 Java 代码进行静态编译(Ahead-of-time AOT)并且坚信那样可以解决性能问题。目的在于避免 JIT 编译器的运行时性能消耗或内存消耗或CPU共享以及避免解释程序的早期性能开销。人们希望java能像C一样在运行之前编译生成本地代码但不幸的是Java 语言本身的动态特性带来了额外的复杂性影响了 Java 程序静态编译代码的质量。1、挑战动态类加载是动态 JIT 编译器面临的一个挑战也是 AOT 编译的一个更重要的问题。只有在执行代码引用类的时候才加载该类。因为是在程序执行前进行 AOT 编译的所以编译器无法预测加载了哪些类。就是说编译器无法获知任何静态字段的地址、任何对象的任何实例字段的偏移量或任何调用的实际目标甚至对直接调用非虚调用也是如此。在执行代码时如果证明对任何这类信息的预测是错误的这意味着一切都将完蛋此外Java 代码可能在程序执行前根本不存在比如 Java 反射服务通常在运行时生成新类来支持程序的行为。缺少关于静态、字段、类和方法的信息意味着严重限制了 Java 编译器中优化框架的大部分功能。内联可能是静态或动态编译器应用的最重要的优化但是由于编译器无法获知调用的目标方法因此无法再使用这种优化。2、内联 内联是一种用于在运行时生成代码避免程序开始和结束时开销的技术方法是将函数的调用代码插入到调用方的函数中。但是内联最大的益处可能是优化方可见的代码的范围扩大了从而能够生成更高质量的代码。下面是一个内联前的代码示例 int foo() { int x2, y3; return bar(x,y); }final int bar(int a, int b) { return ab; } 如果编译器可以证明这个 bar就是 foo()中调用的那个方法则 bar中的代码可以取代 foo()中对 bar()的调用。这时bar()方法是 final类型因此肯定是 foo()中调用的那个方法。甚至在一些虚调用例子中动态 JIT 编译器通常能够推测性地内联目标方法的代码并且在绝大多数情况下能够正确使用。编译器将生成以下代码 int foo() { int x2, y3; return xy; }2、优缺点优点合理的使用AOT可以提高运行效率缺点静态AOT编译器则牺牲了平台无关性和代码质量因为它们不能利用程序的动态行为也不具有关于加载的类或类层次结构的信息。-----------------------------------©著作权归作者所有来自51CTO博客作者赶路人儿的原创作品请联系作者获取转载授权否则将追究法律责任Java编译方式总结前端编译、JIT编译、AOT编译
http://www.laogonggong.com/news/114723.html

相关文章:

  • 国内做网站群平台的公司爱淘宝网页网站建设
  • 建设网站大概需要多少钱网站建设与维护的国家定价标准
  • 上海城乡建设厅网站中机建设深圳公司
  • 南京网站建设 雷小程序内容编辑
  • 网站系统名称是什么wordpress 分享到微信 插件
  • 精品课程网站开发的创新点网站建设 网页开发
  • 网站建设放什么科目手机网站建设推广方案
  • 网站建设的步骤过程文库深圳宝安区租房
  • 公司内部网站建设奖励办法深圳网站制作建设公司
  • 住房和城乡建设部网站施工员证wordpress自动空格
  • 计算机网站开发图片推广企业网站域名
  • 敬请期待前面一句广州网站优化快速提升网站排名
  • 外贸建站哪家公司专业什么是门户网
  • 网站开发深圳公司如何用cms做网站
  • 山西餐饮加盟网站建设网页软件下载
  • 简单的旅游网站代码自己做的网站别人打不开
  • 天津网站开发平台晴天影视
  • 星乐seo网站关键词排名优化网页设计基础项目考核
  • 创网站需要什么网站前端是做啥的
  • 做网站必要性asp网站攻击
  • 网站推广大概需要多少钱设计师必备的6个网站
  • 杭州专业网站营销wordpress 分享按钮
  • 丹阳做网站的公司网站怎么做301重定向
  • 南昌网站建设托管十大猎头公司排名
  • 张家口建设厅官方网站在线编写html网页代码
  • 建设工程j教育网站自动生成h5 wordpress
  • 烟台哪家公司可以做网站已经有域名 怎么做网站
  • 旅游网站建设规划报告怎么写网站的优势是什么
  • 小型的做网站公司从哪里接的项目网站开发维护的工作职责
  • 网站快速备案安全吗江苏专业网站建设公司电话