CN101645018B - 多版本的字节码处理方法、系统和装置 - Google Patents

多版本的字节码处理方法、系统和装置 Download PDF

Info

Publication number
CN101645018B
CN101645018B CN 200910170154 CN200910170154A CN101645018B CN 101645018 B CN101645018 B CN 101645018B CN 200910170154 CN200910170154 CN 200910170154 CN 200910170154 A CN200910170154 A CN 200910170154A CN 101645018 B CN101645018 B CN 101645018B
Authority
CN
China
Prior art keywords
bytecode
precompile
virtual machine
version
generates
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN 200910170154
Other languages
English (en)
Other versions
CN101645018A (zh
Inventor
徐佳宏
程伯钦
朱吕亮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Ipanel TV Inc
Original Assignee
Shenzhen Ipanel TV Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen Ipanel TV Inc filed Critical Shenzhen Ipanel TV Inc
Priority to CN 200910170154 priority Critical patent/CN101645018B/zh
Publication of CN101645018A publication Critical patent/CN101645018A/zh
Application granted granted Critical
Publication of CN101645018B publication Critical patent/CN101645018B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例提供一种多版本的字节码处理方法,以解决编译和运行的分离导致不同版本的字节码在服务器端和客户端互不兼容的问题。该方法包括:获取经过预编译后生成的字节码的版本号;判断所述字节码能否运行于当前版本的虚拟机;若能,则按照所述字节码对应的处理逻辑运行所述字节码,否则,取消运行所述字节码并报错。本发明实施例的虚拟机在接收到高版本的字节码时,按照所述字节码对应的处理逻辑运行所述字节码;在接收到低版本的字节码时,按照之前保留的字节码的处理逻辑运行所述字节码,解决了现有技术在运行字节码时向后不兼容的问题,同时,“取消运行”机制的引入,避免了低版本的虚拟机运行高版本的字节码时必然产生的错误。

Description

多版本的字节码处理方法、系统和装置
技术领域
本发明涉及计算机网络领域,尤其涉及多版本的字节码处理方法、系统和一种虚拟机。 
背景技术
字节码(bytecode)不同于通常情况下经过编译器编译后输出的目标代码,它是一种经过编译但仍然不可以让目标机器直接执行的中间代码。与字节码密切相关的一个概念是虚拟机(VM,Virtual Machine),VM是一种特殊的软件,它可以在计算机平台和终端用户之间建立一种环境,本质上是如真实机器一样能够运行程序的计算机的软件实现。以支持JavaScript的Java虚拟机(JVM,Java Virtual Machine)为例,解析器根据JavaScript的语法规则,分析JavaScript的源代码,建立抽象的语法树;编译器根据JavaScript的语义规则,在解析器建立的抽象语法树的基础上,生成字节码;之后,JVM运行编译器生成的字节码,其中包括建立运行环境和执行实际运行指令。 
上述处理字节码的过程依次包括对JavaScript源代码的解析、编译和字节码的运行。对于嵌入式环境,为了节省嵌入式客户端执行解析、编译的时间和所需的内存空间,现有技术的一种做法是将解析、编译从处理字节码的过程中抽离出来,即,服务器端预先对JavaScript源代码进行解析和编译,客户端直接运行服务器端生成的字节码即可。由于字节码长度一般小于源代码,这种做法实际上还减少了客户端和服务器端之间的通讯时间。 
现有技术中预编译(包括解析和编译)和运行的分离会导致不同版本的字节码在服务器端和客户端互不兼容的问题。例如,为了增加功能或改进性能,有时需要将客户端的浏览器(内置虚拟机)版本升级到新的版本,然而,在虚拟机的版本已升级的情况下,服务器端的编译器未必会进行相应的版本升级。如此,客户端的虚拟机从服务器端获取的字节码仍然是旧版本的编译器生成的旧版本字节码,一旦运行这种字节码,在没有相应的退出机制时必然会出错。 
发明内容
本发明实施例提供一种多版本的字节码处理方法,解决现有技术中编译和运行的分离导致不同版本的字节码在服务器端和客户端互不兼容的问题。 
本发明实施例提供一种多版本的字节码处理方法,包括:获取经过预编译后生成的字节码的版本号;判断所述经过预编译后生成的字节码能否运行于当前版本的虚拟机;若不能,则取消运行所述经过预编译后生成的字节码并报错;所述判断所述经过预编译后生成的字节码能否运行于当前版本的虚拟机包括:判断所述经过预编译后生成的字节码的版本号是否与所述虚拟机当前版本的版本号相等,若是,则判断所述经过预编译后生成的字节码能够运行于当前版本的虚拟机;或者所述判断所述经过预编译后生成的字节码能否运行于当前版本的虚拟机包括:判断所述经过预编译后生成的字节码的版本号是否低于所述虚拟机当前版本的版本号,若是,则判断所述经过预编译后生成的字节码能够运行于当前版本的虚拟机;或者所述判断所述经过预编译后生成的字节码能否运行于当前版本的虚拟机包括:判断所述经过预编译后生成的字节码的版本号是否高于所述虚拟机当前版本的版本号,若是,则判断所述经过预编译后生成的字节码不能运行于当前版本的虚拟机。 
本发明实施例提供一种多版本的字节码处理装置,包括:获取模块,用于获取经过预编译后生成的字节码的版本号;判断模块,用于根据所述获取模块获取的版本号判断所述经过预编译后生成的字节码能否运行于当前版本的虚拟机;字节码处理模块,用于在所述判断模块判断所述经过预编译后生成的字节码不能运行于当前版本的虚拟机时,取消运行所述经过预编译后生成的字节码并报错;所述判断模块包括:第一判断单元,用于判断所述经过预编译后生成的字节码的版本号是否与所述虚拟机当前版本的版本号相等,若是,则判断所述经过预编译后生成的字节码能够运行于当前版本的虚拟机;第二判断单元,用于判断所述经过预编译后生成的字节码的版本号是否低于所述虚拟机当前版本的版本号,若是,则判断所述经过预编译后生成的字节码能够运行于当前版本的虚拟机;第三判断单元,用于判断所述经过预编译后生成的字节码的版本号是否高于所述虚拟机当前版本的版本号,若是,则判断所述经过预编译后生成的字节码不能运行于当前版本的虚拟机。 
一种多版本的字节码处理系统,包括预编译模块和与所述预编译模块分离的虚拟机,所述预编译模块包括:解析器,用于解析源代码,建立抽象的语法树;编译器,用于基于所述语法树,编译所述解析器解析出的源代码,生成字节码,所述字节码中的第一个字节记录标识所述字节码版本的版本号;所述虚拟机包括:获取模块,用于获取经过所述预编译模块编译后生成的字节码的版本号;判断模块,用于根据所述获取模块获取的版本号判断所述预编译模块编译后生成的字节码能否运行于当前版本的虚拟机;字节码处理模块,用于在所述判断模块判断所述预编译模块编译后生成的字节码能够运行于当前版本的虚拟机时,按照所述字节码对应的处理逻辑运行所述预编译模块编译后生成的字节码,以及在所述判断模块判断所述预编译模块编译后生成的字节码不能运行于当前版本的虚拟机时,取消运行所述字节码并报错;所述判断模块包括:第一判断单元,用于判断经过所述预编译模块编译后生成的字节码的版本号是否与所述虚拟机当前版本的版本号相等,若是,则判断经过所述预编译模块编译后生成的字节码能够运行于当前版本的虚拟机;第二判断单元,用于判断所述经过预编译后生成的字节码的版本号是否低于所述虚拟机当前版本的版本号,若是,则判断所述经过预编译后生成的字节码能够运行于当前版本的虚拟机;第三判断单元,用于判断经过所述预编译模块编译后生成的字节码的版本是否高于所述虚拟机当前版本的版本,若是,则判断所述经过预编译后生成的字节码不能运行于当前版本的虚拟机。 
在本发明实施例中,通过获取经过预编译后生成的字节码的版本号,在判断所述字节码能够运行于当前版本的虚拟机时,按照所述字节码对应的处理逻辑运行所述字节码,在判断所述字节码不能运行于当前版本的虚拟机时,取消运行所述字节码并报错。与现有技术相比,本发明实施例的虚拟机在接收到高版本的字节码时,按照所述字节码对应的处理逻辑运行所述字节码;在接收到低版本的字节码时,按照之前保留的字节码的处理逻辑运行所述字节码,解决了现有技术在运行字节码时向后不兼容的问题,同时,“取消运行”机制的引入,避免了低版本的虚拟机运行高版本的字节码时必然产生的错误。 
附图说明
图1是本发明实施例提供的多版本的字节码处理方法基本流程示意图; 
图2是本发明实施例提供的虚拟机基本逻辑结构示意图; 
图3是本发明实施例提供的终端设备基本逻辑结构示意图; 
图4是本发明实施例提供的多版本的字节码处理系统基本逻辑结构示意 图。 
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例还提供相应的多版本的字节码处理系统、虚拟机和一种客户端设备。以下分别进行详细说明。 
请参阅图1,本发明实施例提供的多版本的字节码处理方法基本流程,包括: 
步骤S101,获取经过预编译后生成的字节码的版本号。 
在服务器端,可以将源代码(例如,JavaScript源代码)预先经过解析、编译后生成字节码发送给客户端,这样省去了客户端解析、编译的时间和内存空间。预编译后的字节码的字节中记录有该字节码的版本。理论上,字节码的版本可以记录在任意字节上,但考虑到先于记录有字节码版本字节到达客户端的字节一旦到达客户端即可能被处理,因此,为了防止出错,在本发明实施例中,将字节码的版本记录在该字节码的第一个字节中。这样,客户端通过读取该第一个字节,即可以获取经过预编译后生成的字节码的版本号。在本发明实施例中,字节码的版本号用于标识该字节码的版本,因此,在下文中,有时为了叙述方便,字节码的版本和字节码的版本号交替使用,不加区分。 
步骤S102,判断所述字节码能否运行于当前版本的虚拟机。 
现有技术中,在编译器和虚拟机(或服务器端和客户端)分离时,默认为虚拟机总是能运行任何版本的字节码,譬如,默认升级后的虚拟机(新版本的虚拟机)仍然可以运行版本低于虚拟机当前版本的字节码。如前所述,运行低版本的字节码将会出错。 
因此,在本发明实施例中,在获取字节码的版本后,引入相应的判断机制,判断经过预编译后生成的字节码能否运行于当前版本的虚拟机。判断的准则包括: 
准则一:比较所述经过预编译后生成的字节码的版本是否与所述虚拟机当前版本的版本相等,若是,则判断所述字节码能够运行于当前版本的虚拟机; 
准则二:比较所述经过预编译后生成的字节码的版本是否低于所述虚拟机当前版本,若是,则判断所述字节码能够运行于当前版本的虚拟机; 
准则三:比较所述经过预编译后生成的字节码的版本是否高于所述虚拟机当前版本,若是,则判断所述字节码不能运行于当前版本的虚拟机。 
以下对按照三种准则下判断的情况的处理进行说明。 
步骤S103,若所述字节码能够运行于当前版本的虚拟机,则按照所述字节码对应的处理逻辑运行所述字节码,否则,取消运行所述字节码并报错。 
如前所述,由于程序的改进,会引起字节码版本的更新(或版本更新了的编译器生成版本更新了的字节码),这样,实际上形成了多个版本的字节码。对于服务器端,只保留编译器生成的字节码的最新版本对应的处理逻辑。 
以字节类型为例,对于支持JavaScript的函数,在第一版本的字节码(简写为JS_BYTECODE_VER1)中将参数个数或局部变量个数定义为单字节类型,即,参数个数或局部变量个数最大值只能为255。随着页面应用复杂度增加,局部变量个数很容易超过255这个限制,这时需要将编译器升级,使其生成的字节码升级更高的版本,即,第二版本的字节码(简写为JS_BYTECODE_VER2)。在JS_BYTECODE_VER2中,参数个数或局部变量个数被定义为双字节类型,编译器只保留对双字节类型的处理逻辑。 
若经判断,所述经过预编译后生成的字节码的版本与所述虚拟机当前版本相等,例如,若经过预编译后生成的字节码的版本为JS_BYTECODE_VER2,而虚拟机当前版本也为JS_BYTECODE_VER2,则虚拟机按照版本为JS_BYTECODE_VER2的字节码的处理逻辑来运行第二版本的字节码(JS_BYTECODE_VER2)。对于上述字节类型变化的实例,虚拟机机按照双字节类型的处理逻辑来运行第二版本的字节码。
若经判断,所述经过预编译后生成的字节码的版本低于所述虚拟机当前版本,例如,若经过预编译后生成的字节码的版本为JS_BYTECODE_VER1,而虚拟机当前版本为JS_BYTECODE_VER2,则虚拟机按照之前保留的字节码的 处理逻辑运行JS_BYTECODE_VER1。对于上述字节类型变化的实例,虚拟机按照保留的单字节类型的处理逻辑来运行低于所述虚拟机当前版本的字节码JS_BYTECODE_VER1。 
由于虚拟机保留有版本比其当前版本更低的字节码的处理逻辑,因此,当虚拟机的版本升级时,其仍然能够运行编译器生成的低版本的字节码,与现有技术相比,实际上解决了现有技术在编译(包括解析)和运行分离时存在的向后兼容的问题。 
若经判断,所述经过预编译后生成的字节码的版本高于所述虚拟机当前版本,若经过预编译后生成的字节码的版本为JS_BYTECODE_VER3,而虚拟机当前版本为JS_BYTECODE_VER1,则取消对接收的字节码的运行,同时报错。这种在发现接收的字节码的版本高于虚拟机当前版本时及时取消运行的机制,避免了低版本的虚拟机运行高版本的字节码时必然产生的错误。
请参阅图2,本发明实施例提供的虚拟机基本逻辑结构示意图。为了便于说明,仅示出了与本发明实施例相关的部分,其包含的功能模块/单元可以是硬件模块/单元、软件模块/单元或软硬件相结合的模块/单元。 
获取模块201,用于获取经过预编译后生成的字节码的版本号。 
在本实施例中,获取模块201通过读取编译器发送过来的字节码的第一个字节即可以获取经过预编译后生成的字节码的版本号。 
判断模块202,用于根据所述获取模块201获取的版本号判断所述字节码能否运行于当前版本的虚拟机,其包括第一判断单元2021、第二判断单元2022和第三判断单元2023,其中: 
第一判断单元2021,用于判断所述经过预编译后生成的字节码的版本是否与所述虚拟机当前版本的版本相等,若是,则判断所述字节码能够运行于当前版本的虚拟机; 
第二判断单元2022,用于判断所述经过预编译后生成的字节码的版本是否低于所述虚拟机当前版本的版本,若是,则判断所述字节码能够运行于当前版本的虚拟机; 
第三判断单元2023,用于判断所述经过预编译后生成的字节码的版本是否 高于所述虚拟机当前版本的版本,若是,则判断所述字节码不能运行于当前版本的虚拟机。 
字节码处理模块203,用于在所述判断模块202判断所述字节码能够运行于当前版本的虚拟机时,按照所述字节码对应的处理逻辑运行所述字节码,和/或在所述判断模块判断所述字节码不能运行于当前版本的虚拟机时,取消运行所述字节码并报错,其包括: 
第一处理单元2031,用于所述第一判断单元2021判断所述经过预编译后生成的字节码的版本与所述虚拟机当前版本的版本相等时,按照所述经过预编译后生成的字节码的处理逻辑运行所述字节码; 
第二处理单元2032,用于所述第二判断单元2022判断所述经过预编译后生成的字节码的版本低于所述虚拟机当前版本的版本时,按照之前保留的字节码的处理逻辑运行所述字节码。 
第三处理单元2033,用于所述第三判断单元2023判断所述经过预编译后生成的字节码的版本高于所述虚拟机当前版本的版本时,取消运行所述字节码并报错。 
请参阅图3,本发明实施例提供的终端设备基本逻辑结构示意图。为了便于说明,仅示出了与本发明实施例相关的部分,该终端设备可以是浏览器或机顶盒,其包含的功能模块/单元可以是硬件模块/单元、软件模块/单元或软硬件相结合的模块/单元。 
解析器31,用于解析源代码,建立抽象的语法树; 
编译器32,用于基于所述解析器31建立的抽象语法树,编译所述解析器解析出的源代码,生成字节码; 
虚拟机33,用于运行所述编译器32生成的字节码或运行经过服务器端预编译后生成的字节码,所述虚拟机33包括: 
获取模块331,用于获取经过预编译后生成的字节码的版本号; 
判断模块332,用于根据所述获取模块331获取的版本号判断所述字节码能否运行于当前版本的虚拟机,其包括: 
第一判断单元3321,用于判断所述经过预编译后生成的字节码的版本是否 与所述虚拟机当前版本的版本相等,若是,则判断所述字节码能够运行于当前版本的虚拟机; 
第二判断单元3322,用于判断所述经过预编译后生成的字节码的版本是否低于所述虚拟机当前版本的版本,若是,则判断所述字节码能够运行于当前版本的虚拟机; 
第三判断单元3323,用于判断所述经过预编译后生成的字节码的版本是否高于所述虚拟机当前版本的版本,若是,则判断所述字节码不能运行于当前版本的虚拟机; 
字节码处理模块333,用于在所述判断模块332判断所述字节码能够运行于当前版本的虚拟机时,按照所述字节码对应的处理逻辑运行所述字节码,和/或在所述判断模块判断所述字节码不能运行于当前版本的虚拟机时,取消运行所述字节码并报错,字节码处理模块333包括: 
第一处理单元3331,用于所述第一判断单元3321判断所述经过预编译后生成的字节码的版本与所述虚拟机当前版本的版本相等时,按照所述经过预编译后生成的字节码的处理逻辑运行所述字节码; 
第二处理单元3332,用于所述第二判断单元3322判断所述经过预编译后生成的字节码的版本低于所述虚拟机当前版本的版本时,按照之前保留的字节码的处理逻辑运行所述字节码。 
第三处理单元3333,用于所述第三判断单元3323判断所述经过预编译后生成的字节码的版本高于所述虚拟机当前版本的版本时,取消运行所述字节码并报错。 
请参阅图4,本发明实施例提供的多版本的字节码处理系统基本逻辑结构示意图。为了便于说明,仅示出了与本发明实施例相关的部分,其包含的功能模块/单元可以是硬件模块/单元、软件模块/单元或软硬件相结合的模块/单元。该多版本的字节码处理系统包括预编译模块41和与所述预编译模块分离的虚拟机42,其中,预编译模块41包括: 
解析器411,用于解析源代码,建立抽象的语法树; 
编译器412,用于基于所述解析器411建立的抽象语法树,编译所述解析器 411解析出的源代码,生成字节码,所述字节码中的第一个字节记录标识所述字节码版本的版本号; 
虚拟机42包括: 
获取模块421,用于获取经过所述预编译模块预编译后生成的字节码的版本号; 
判断模块422,用于根据所述获取模块421获取的版本号判断所述字节码能否运行于当前版本的虚拟机,其包括: 
第一判断单元4221,用于判断所述经过预编译后生成的字节码的版本是否与所述虚拟机当前版本的版本相等,若是,则判断所述字节码能够运行于当前版本的虚拟机; 
第二判断单元4222,用于判断所述经过预编译后生成的字节码的版本是否低于所述虚拟机当前版本的版本,若是,则判断所述字节码能够运行于当前版本的虚拟机; 
第三判断单元4223,用于判断所述经过预编译后生成的字节码的版本是否高于所述虚拟机当前版本的版本,若是,则判断所述字节码不能运行于当前版本的虚拟机; 
字节码处理模块423,用于在所述判断模块422判断所述字节码能够运行于当前版本的虚拟机时,按照所述字节码对应的处理逻辑运行所述字节码,和/或在所述判断模块判断所述字节码不能运行于当前版本的虚拟机时,取消运行所述字节码并报错,字节码处理模块423包括: 
第一处理单元4231,用于所述第一判断单元4221判断所述经过预编译后生成的字节码的版本与所述虚拟机当前版本的版本相等时,则增加所述字节码的处理逻辑并保留版本低于所述虚拟机当前版本的字节码的处理逻辑; 
第二处理单元4232,用于所述第二判断单元4222判断所述经过预编译后生成的字节码的版本低于所述虚拟机当前版本的版本时,按照之前保留的字节码的处理逻辑运行所述字节码。 
第三处理单元4233,用于所述第三判断单元4223判断所述经过预编译后生成的字节码的版本高于所述虚拟机当前版本的版本时,取消运行所述字节码并 报错。 
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁盘或光盘等。 
以上对本发明实施例所提供的多版本的字节码处理方法、系统和一种虚拟机进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。 

Claims (6)

1.一种多版本的字节码处理方法,其特征在于,包括:
获取经过预编译后生成的字节码的版本号;
判断所述经过预编译后生成的字节码能否运行于当前版本的虚拟机;
若不能,则取消运行所述经过预编译后生成的字节码并报错;
所述判断所述经过预编译后生成的字节码能否运行于当前版本的虚拟机包括:判断所述经过预编译后生成的字节码的版本号是否与所述虚拟机当前版本的版本号相等,若是,则判断所述经过预编译后生成的字节码能够运行于当前版本的虚拟机;或者
所述判断所述经过预编译后生成的字节码能否运行于当前版本的虚拟机包括:判断所述经过预编译后生成的字节码的版本号是否低于所述虚拟机当前版本的版本号,若是,则判断所述经过预编译后生成的字节码能够运行于当前版本的虚拟机;或者
所述判断所述经过预编译后生成的字节码能否运行于当前版本的虚拟机包括:判断所述经过预编译后生成的字节码的版本号是否高于所述虚拟机当前版本的版本号,若是,则判断所述经过预编译后生成的字节码不能运行于当前版本的虚拟机。
2.如权利要求1所述多版本的字节码处理方法,其特征在于,若判断所述经过预编译后生成的字节码的版本号与所述虚拟机当前版本的版本号相等,则按照所述经过预编译后生成的字节码的处理逻辑运行所述经过预编译后生成的字节码。
3.如权利要求1所述多版本的字节码处理方法,其特征在于,若判断所述经过预编译后生成的字节码的版本号低于所述虚拟机当前版本的版本号,则按照所述虚拟机保留的字节码的处理逻辑运行所述经过预编译后生成的字节码。
4.一种多版本的字节码处理装置,其特征在于,所述装置包括:
获取模块,用于获取经过预编译后生成的字节码的版本号;
判断模块,用于根据所述获取模块获取的版本号判断所述经过预编译后生成的字节码能否运行于当前版本的虚拟机;
字节码处理模块,用于在所述判断模块判断所述经过预编译后生成的字节码不能运行于当前版本的虚拟机时,取消运行所述经过预编译后生成的字节码并报错;
所述判断模块包括:
第一判断单元,用于判断所述经过预编译后生成的字节码的版本号是否与所述虚拟机当前版本的版本号相等,若是,则判断所述经过预编译后生成的字节码能够运行于当前版本的虚拟机;
第二判断单元,用于判断所述经过预编译后生成的字节码的版本号是否低于所述虚拟机当前版本的版本号,若是,则判断所述经过预编译后生成的字节码能够运行于当前版本的虚拟机;
第三判断单元,用于判断所述经过预编译后生成的字节码的版本号是否高于所述虚拟机当前版本的版本号,若是,则判断所述经过预编译后生成的字节码不能运行于当前版本的虚拟机。
5.如权利要求4所述的装置,其特征在于,所述字节码处理模块包括:
第一处理单元,用于所述第一判断单元判断所述经过预编译后生成的字节码的版本号与所述虚拟机当前版本的版本号相等时,按照所述经过预编译后生成的字节码的处理逻辑运行所述经过预编译后生成的字节码;
第二处理单元,用于所述第二判断单元判断所述经过预编译后生成的字节码的版本号低于所述虚拟机当前版本的版本号时,按照所述虚拟机保留的字节码的处理逻辑运行所述经过预编译后生成的字节码。
6.一种多版本的字节码处理系统,包括预编译模块和与所述预编译模块分离的虚拟机,其特征在于,所述预编译模块包括:
解析器,用于解析源代码,建立抽象的语法树;
编译器,用于基于所述语法树,编译所述解析器解析出的源代码,生成字节码,所述字节码中的第一个字节记录标识所述字节码版本的版本号;
所述虚拟机包括:
获取模块,用于获取经过所述预编译模块编译后生成的字节码的版本号;
判断模块,用于根据所述获取模块获取的版本号判断所述预编译模块编译后生成的字节码能否运行于当前版本的虚拟机;
字节码处理模块,用于在所述判断模块判断所述预编译模块编译后生成的字节码能够运行于当前版本的虚拟机时,按照所述字节码对应的处理逻辑运行所述预编译模块编译后生成的字节码,以及在所述判断模块判断所述预编译模块编译后生成的字节码不能运行于当前版本的虚拟机时,取消运行所述预编译模块编译后生成的字节码并报错;
所述判断模块包括:
第一判断单元,用于判断经过所述预编译模块编译后生成的字节码的版本号是否与所述虚拟机当前版本的版本号相等,若是,则判断经过所述预编译模块编译后生成的字节码能够运行于当前版本的虚拟机;
第二判断单元,用于判断所述经过预编译后生成的字节码的版本号是否低于所述虚拟机当前版本的版本号,若是,则判断经过所述预编译模块编译后生成的字节码能够运行于当前版本的虚拟机;
第三判断单元,用于判断所述经过预编译后生成的字节码的版本号是否高于所述虚拟机当前版本的版本号,若是,则判断经过所述预编译模块编译后生成的字节码不能运行于当前版本的虚拟机。
CN 200910170154 2009-09-03 2009-09-03 多版本的字节码处理方法、系统和装置 Active CN101645018B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200910170154 CN101645018B (zh) 2009-09-03 2009-09-03 多版本的字节码处理方法、系统和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200910170154 CN101645018B (zh) 2009-09-03 2009-09-03 多版本的字节码处理方法、系统和装置

Publications (2)

Publication Number Publication Date
CN101645018A CN101645018A (zh) 2010-02-10
CN101645018B true CN101645018B (zh) 2012-12-26

Family

ID=41656914

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200910170154 Active CN101645018B (zh) 2009-09-03 2009-09-03 多版本的字节码处理方法、系统和装置

Country Status (1)

Country Link
CN (1) CN101645018B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2482184A1 (en) * 2011-02-01 2012-08-01 Irdeto B.V. Adaptive obfuscated virtual machine
CN105590051B (zh) * 2015-11-18 2018-10-23 中国银联股份有限公司 用于可信执行环境的可信应用生成及安装方法
CN107193577B (zh) * 2016-03-15 2021-08-03 斑马智行网络(香港)有限公司 一种应用启动方法、装置和智能终端
CN109445798B (zh) * 2018-10-17 2022-04-22 厦门安胜网络科技有限公司 一种LuaJIT字节码的处理方法、装置及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040031022A1 (en) * 2002-08-02 2004-02-12 Masayuki Kabasawa Information processing device for multiple instruction sets with reconfigurable mechanism
US20080104095A1 (en) * 2006-06-05 2008-05-01 International Business Machines Corporation Orthogonal Integration of De-serialization into an Interpretive Validating XML Parser
WO2009019895A1 (ja) * 2007-08-09 2009-02-12 Panasonic Corporation 端末装置、サーバ及びそのシステム
CN101491054A (zh) * 2006-07-12 2009-07-22 高通股份有限公司 信号压缩udvm性能优化的方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040031022A1 (en) * 2002-08-02 2004-02-12 Masayuki Kabasawa Information processing device for multiple instruction sets with reconfigurable mechanism
US20080104095A1 (en) * 2006-06-05 2008-05-01 International Business Machines Corporation Orthogonal Integration of De-serialization into an Interpretive Validating XML Parser
CN101491054A (zh) * 2006-07-12 2009-07-22 高通股份有限公司 信号压缩udvm性能优化的方法和装置
WO2009019895A1 (ja) * 2007-08-09 2009-02-12 Panasonic Corporation 端末装置、サーバ及びそのシステム

Also Published As

Publication number Publication date
CN101645018A (zh) 2010-02-10

Similar Documents

Publication Publication Date Title
US8307350B2 (en) Multi level virtual function tables
US9811360B2 (en) Dynamic determination of application server runtime classloading
US9519466B2 (en) Executable code for constrained computing environments
CN110704063B (zh) 编译和执行智能合约的方法及装置
US6434742B1 (en) Symbol for automatically renaming symbols in files during the compiling of the files
US20120233601A1 (en) Recompiling with Generic to Specific Replacement
US9524175B2 (en) Target typing of overloaded method and constructor arguments
CN103064720A (zh) 简档导向的jit代码生成
CN104536797A (zh) 一种Java程序预编译方法和预编译器
CN101697131A (zh) 一种可重定位文件动态加载的方法及装置
CN101645018B (zh) 多版本的字节码处理方法、系统和装置
CN101002174A (zh) 在便携式装置中加载具有面向对象的中间语言的软件的方法
US5960197A (en) Compiler dispatch function for object-oriented C
CN102830975A (zh) 一种汇编语言到高级语言的代码转换方法和装置
CN106796525B (zh) 按需加载动态脚本语言代码以减少内存使用
CN110069259A (zh) 基于idl文件的解析方法、装置、电子设备和存储介质
CN112099880B (zh) 场景驱动的应用程序约减方法和系统
CN112416612B (zh) 服务调用方法、装置、计算机设备和可读存储介质
CN112306501A (zh) 业务数据采集方法、装置、存储介质和计算设备
CN115617687A (zh) 程序插桩方法、装置、设备和存储介质
CN105426500A (zh) 网页脚本动态生成的链接的提取方法及装置
CN109739509A (zh) 隐藏api调用的检测方法、装置及计算机存储介质
US7266814B2 (en) Namespace based function invocation
CN113050948A (zh) 动态库优化方法、装置、设备及存储介质
CN112256324B (zh) 安卓应用程序构建过程中对文件的处理方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant