[发明专利]系统的提前编译方法和装置有效
申请号: | 201810152096.1 | 申请日: | 2018-02-14 |
公开(公告)号: | CN110162306B | 公开(公告)日: | 2023-06-23 |
发明(设计)人: | 聂久焘;曾利永;梅丽刚;黄岚之观 | 申请(专利权)人: | 斑马智行网络(香港)有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 北京君以信知识产权代理有限公司 11789 | 代理人: | 钱秀茹 |
地址: | 中国香港九龙长沙湾道*** | 国省代码: | 暂无信息 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 系统 提前 编译 方法 装置 | ||
本申请公开了一种系统的提前编译方法和装置。该方法包括如下步骤:根据源程序生成编译数据;将所述编译数据链接至内存管理单元;将链接后的编译数据写入提前编译文件;将所述提前编译文件加载至所述内存管理单元。本申请实施例提供的方法和装置,利用动态类型语言系统自身提供的机制,实现了一种适用于动态类型语言系统的提前编译方法。本申请将提前编译文件加载到内存管理单元后,就可以直接运行,在程序运行时不需要再执行读入源代码文件、解释、生成字节码等动作,本申请提供的方法具有系统开销小,程序响应速度快等优点。
技术领域
本申请涉及计算机领域,特别是涉及一种系统的提前编译方法和装置。
背景技术
动态编程语言是计算机科学中的一类高级编程语言,是指程序在运行时可以改变其结构的编程语言。
动态语言的提前编译(ahead of time compliance,AOT),是计算机科学中将动态编程语言编译成与执行该动态编程语言的动态编程语言系统相关的本地机器码,从而可以在本地机器上直接执行提前编译生成的二进制文件。
由于动态语言程序在运行时可以执行引进新的函数、删除已有的函数等动态行为,动态语言程序可以动态地产生代码,例如字节码或者本地代码。为了减少内存的占用,多数动态语言系统采用自动存储管理系统来统一管理动态产生的代码、以及运行动态语言程序所需要的符号表和常量池等相关数据,将动态产生的代码、符号和常量池中的常量都在内存管理单元中分配。内存管理单元例如是系统堆,是系统管理的用于满足程序动态内存分配的内存区域。由于内存区域存储上述动态对象和相关数据的地址是可变动的,导致动态语言无法像静态语言的编译过程一样,事先确定这些动态对象的地址。因此,现有的静态语言采用的编译-链接-执行的编译技术无法用来实现动态语言的提前编译。
为了提高动态语言的响应时间,一些动态语言程序通过序列化和反序列化技术来实现提前编译。这一方法的主要方式在于:在动态语言程序执行的某一时刻,将内存管理单元中与当前运行程序相关的所有对象序列化,写入文件。下次运行时,读入文件,将文件中保存的数据反序列化,在堆中重构和恢复对象。
举例来说,snapshot这一动态编程语言采用了序列化和反序列化的技术,将程序执行时的动态对象和相关数据通过序列化技术保存到本地机器的存储区域,生成snapshot本地文件,下次运行snapshot程序时,将该snapshot本地文件读入本地机器的执行系统的内存进程空间,恢复动态对象和相关数据,从而恢复执行时的系统状态。这个方案需要通过序列化将动态对象和相关数据保存到存储空间,下次执行时,需要再将snapshot本地文件的全部内容读入到内存进程空间,才能恢复相关对象和数据,恢复过程用时长、占用内存多,会影响系统性能。
再举例来说,Code caching这一动态编程语言也采用了序列化和反序列化的技术。Code caching是将动态编程语言动态生成的字节码序列化后保存到本地机器的存储区域,生成Code caching本地文件,即缓冲数据文件。下次运行code caching程序时,将该Code caching本地文件读入内存进行反序列化,还原为字节码及其相关对象,从而节省了词法解析、语法分析、生成字节码等过程。但是,这一方法需要读入缓冲数据文件,然后才能将文件中的内容反序列化,才能得到程序的字节码。在每次程序运行时均需要进行一次反序列化,即根据缓冲文件重构程序对象,这一步骤的内存占用和时间开销会引起系统性能下降。
因此,由于现有的动态编程语言需要在动态编程系统的内存空间中动态恢复程序对象,内存占用和耗时都影响到了执行该动态编程语言的系统效率的提高。尤其对于移动应用冷启动、无服务器启动等对响应时间要求很高的场景,现有动态编程语言的提前编译方法无法满足系统性能要求。
发明内容
鉴于上述问题,本申请一实施例提出一种系统的提前编译方法和装置,以解决现有技术存在的问题。
为了解决上述问题,本申请一实施例公开一种系统的提前编译方法,包括如下步骤:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于斑马智行网络(香港)有限公司,未经斑马智行网络(香港)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810152096.1/2.html,转载请声明来源钻瓜专利网。