APP下载
报价宝  ›  综合  › 

V8引擎编译器架构打掉重练,执行速度更快、内存耗用更少

报价宝 来源:baojiabao.com 发布时间:2018-08-02 09:31:00 09月11日更新
报价宝综合消息V8引擎编译器架构打掉重练,执行速度更快、内存耗用更少

Nodesource资深工程师Thorsten Lorenz在自家部落格发文提到,新的V8引擎做了很大个更新,特别是在编译器架构开发团队做出了重大的改变,从Crankshaft换成了TurboFan,以突破V8引擎陷入难以扩展的窘境,这个新的V8引擎架构带来较小的性能悬崖(Performance Cliffs)、较快的启动速度以及减少使用内存容量。现在Node.js 8也使用这个全新的V8引擎。

V8引擎在之前遇到了最佳化杀手,似乎无法直接在引擎中修复,而V8团队也很难在维持良好的效能下,实作JavaScript新语言功能,开发陷入了瓶颈。Thorsten Lorenz谈到,之所以会遇到这个困境,最主要是因为V8的架构,变得越来越难以改变和扩展,其使用的最佳化编译器Crankshaft,缺乏持续发展语言实作的愿景,而且编译器工作管道各层没有明显分离逐渐成为问题,在部分极端的案例中,开发人员必须为支援4种架构,手写组合语言程式码。

但因为JavaScript本身是一个进化快速的语言,会不停地新增新的语言功能,因此做为先进的JavaScript引擎,V8团队认为现况并非一个能持续发展的系统,于是开始着手设计新的编译器架构,这个新架构具备了清楚分层设计,分为前端、最佳化层和后端。

前端主要任务是由Ignition直译器产生字节码,而最佳化层则是以TurboFan取代了Crankshaft最佳化编译器,提升了程式码执行的效能。后端则是
以执行低阶的任务为主,像是机器层级的最佳化、排程或是产生支援架构的机器码。Thorsten Lorenz提到,光把后端分离的动作,即便现在支援9种架构,就能让特定架构的程式码少了29%。

而过去V8团队由于过于专注最佳化程式码的效能,忽略了字节码的执行效能,这样不平衡的发展造成了效能悬崖(Performance Cliffs)的现象,使得整体应用程序在执行时,效能表现变得难以预测。在特定情况下,应用程序效能可能会被Crankshaft绊住,甚至在部分情况下应用程序的执行速度还可能慢上100倍。Thorsten Lorenz表示,虽然在多数的时候,最佳化编译器并不如直译器那样的重要,毕竟程式码需要被快速执行,没有时间来预热程式码,而且推测性的最佳化成本并不低,在某些情况还会降低效能。

因此现在V8团队的解决办法,就是提高字节码直译器的基准效能,透过传递字节码到内嵌最佳化阶段,进而产生高度最佳化与小型直译码,该直译码可以执行指令并以低成本的方式与其他V8虚拟机器互动。也由于字节码很小,内存使用量也跟着减少,而且执行的速度也非常快速。Thorsten Lorenz表示,执行字节码而非TurboFan最佳化程式码,并不会产生任何的副作用,因为字节码更接近最佳化程式码,这也代表效能悬崖获得有效的解决。

V8引擎在垃圾回收器也做了很大的变动,其中一个垃圾收集器Orinoco,现在能平行回收内存。V8团队在效能改进下足功夫,还在资料型态、语言功能、内存分析器与程式码快取都做了不少更新,进而增加整体应用程序运作的效能。

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 报价宝 手机价格 汽车价格 笔记本价格 小米手机价格