CN105373414A - 支持MIPS平台的Java虚拟机实现方法及装置 - Google Patents
支持MIPS平台的Java虚拟机实现方法及装置 Download PDFInfo
- Publication number
- CN105373414A CN105373414A CN201410426143.9A CN201410426143A CN105373414A CN 105373414 A CN105373414 A CN 105373414A CN 201410426143 A CN201410426143 A CN 201410426143A CN 105373414 A CN105373414 A CN 105373414A
- Authority
- CN
- China
- Prior art keywords
- realizing
- application program
- thread
- signal
- function
- 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.)
- Granted
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种支持MIPS平台的Java虚拟机实现方法及装置。该方法包括:实现安全点功能时,应用程序访问页面所产生的信号满足预设条件认为信号是安全点信号;实现内存管理功能时若应用程序运行过程中更新对象的引用关系则清除卡片表中对象的标记位;实现线程管理功能时利用本地操作系统的线程操作API对线程进行管理;实现解释器功能时调用与应用程序对应的模板实现应用程序的执行;模板为基于MIPS平台的模板化解释器针对应用程序中的字节码预先生成的本地MIPS指令集序列;实现编译器功能时在即时编译器中生成MIPS指令的具体规则、根据本地MIPS指令集生成栈帧结构和参数传递规范,并针对本地MIPS指令集的后端指令进行优化。
Description
技术领域
本发明涉及计算机技术,尤其涉及一种支持无内部互锁流水级的微处理器(MicroprocessorwithoutInterlockedPipedStages,简称:MIPS)平台的Java虚拟机实现方法及装置。
背景技术
Java语言在计算机领域有普遍的应用,虚拟机是一种支持平台无关字节码指令集的系统软件,任何硬件系统都必须配备相应的Java虚拟机才能支持Java应用软件的运行。
Java虚拟机根据是否具有平台依赖性,可以分为平台无关的虚拟机和平台相关的虚拟机。通常,平台相关的虚拟机采用解释器-即时编译器的方式实现。即时编译器在虚拟机运行过程中,将一组连续目标指令为单位整体编译成同等功能的本地中央处理器(CentralProcessingUnit,简称:CPU)指令集。在下一次执行这个位置的目标指令时,就可以直接执行已经翻译的本地CPU指令。
但是,平台相关的Java虚拟机不具有跨平台性,尤其是即时编译器是针对一个特定平台将指令翻译成本地CPU指令,因此,应用于X86、Spare等指令集系统平台的Java虚拟机的实现方法无法完全应用于支持MIPS平台的Java虚拟机。
发明内容
本发明提供一种支持MIPS平台的Java虚拟机实现方法及装置,以实现对MIPS平台运行的Java应用程序的良好支持。
第一方面,本发明提供一种支持MIPS平台的Java虚拟机实现方法,包括:
实现安全点功能时,若应用程序访问页面所产生的信号满足预设条件,则认为所述信号是安全点信号;
实现内存管理功能时,若所述应用程序运行过程中更新对象的引用关系,则清除卡片表中与所述对象对应的标记位;
实现线程管理功能时,利用本地操作系统的线程操作应用程序编程接口API对线程进行管理;其中,所述对线程进行管理包括:创建线程、终止线程、暂停线程、线程的同步以及线程的互斥;
实现解释器功能时,通过调用与所述应用程序对应的模板,实现所述应用程序的执行;其中,所述模板为基于所述MIPS平台的模板化解释器针对所述应用程序中每个字节码预先生成的本地MIPS指令集序列;
实现编译器功能时,在针对所述本地MIPS指令集的即时编译器中生成MIPS指令的具体规则、根据所述本地MIPS指令集生成栈帧结构和参数传递规范,并针对所述本地MIPS指令集的后端指令进行优化。
在第一方面的第一种可能的实现方式中,所述实现安全点功能时,若应用程序访问页面所产生的信号满足预设条件,则认为所述信号是安全点信号,包括:
若所述应用程序访问页面时产生信号的指令是访存指令,且所述访存指令所访问的内存地址是指定页面,则认为所述信号是所述安全点信号。
结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述认为所述信号时所述安全点信号包括:采用访问非可读页面的方式实现对所述线程的暂停。
在第一方面的第三种可能的实现方式中,所述实现内存管理功能时,若所述应用程序运行过程中更新对象的引用关系,则清除卡片表中与所述对象对应的标记位,包括:
将所述卡片表的首地址加载到第一寄存器中,将经过逻辑运算后的所述首地址与加载到所述第一寄存器中的所述首地址相加,并将结果保存在所述第一寄存器中,再将第二寄存器的值作为一个字节写入所述第一寄存器指向的内存单元中;其中,所述第二寄存器的值恒为零。
结合第一方面至第一方面的第三种任一可能的实现方式,在第四种可能的实现方式中,所述实现安全点功能之前,还包括:
实现类文件装载功能时,读取所述应用程序的类文件,并在所述类文件格式的有效性验证通过后,将所述类文件转换为内部的数据结构注册到类管理器中。
第二方面,本发明提供一种支持MIPS平台的Java虚拟机实现装置,包括:
安全点模块,用于实现安全点功能时,若应用程序访问页面所产生的信号满足预设条件,则认为所述信号是安全点信号;
内存管理模块,用于实现内存管理功能时,若所述应用程序运行过程中更新对象的引用关系,则清除卡片表中与所述对象对应的标记位;
线程管理模块,用于实现线程管理功能时,利用本地操作系统的线程操作应用程序编程接口API管理线程;其中,所述管理线程包括创建线程、终止线程、暂停线程、线程的同步以及线程的互斥;
解释器模块,用于实现解释器功能时,通过调用与所述应用程序对应的模板,实现所述应用程序的执行;其中,所述模板为基于所述MIPS平台的模板化解释器针对所述应用程序中每个字节码预先生成的本地MIPS指令集序列;
编译器模块,用于实现编译器功能时,在针对所述本地MIPS指令集的即时编译器中生成MIPS指令的具体规则、根据所述本地MIPS指令集生成栈帧结构和参数传递规范,并针对所述本地MIPS指令集的后端指令进行优化。
在第二方面的第一种可能的实现方式中,所述安全点模块具体用于:
若所述应用程序访问页面时产生信号的指令是访存指令,且所述访存指令所访问的内存地址是指定页面,则认为所述信号是所述安全点信号。
结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述安全点模块具体用于采用访问非可读页面的方式实现对所述线程的暂停。
在第二方面的第三种可能的实现方式中,所述内存管理模块具体用于:
将所述卡片表的首地址加载到第一寄存器中,将经过逻辑运算后的所述首地址与加载到所述第一寄存器中的所述首地址相加,并将结果保存在所述第一寄存器中,再将第二寄存器的值作为一个字节写入所述第一寄存器指向的内存单元中;其中,所述第二寄存器的值恒为零。
结合第二方面至第二方面的第三种任一可能的实现方式,在第四种可能的实现方式中,所述装置还包括类文件装载模块:
用于实现类文件装载功能时,读取所述应用程序的类文件,并在所述类文件格式的有效性验证通过后,将所述类文件转换为内部的数据结构注册到类管理器中。
本发明提供的支持MIPS平台的Java虚拟机实现方法及装置,通过实现安全点功能时,若应用程序访问页面所产生的信号满足预设条件,则将页面作为安全点页面;实现内存管理功能时,若应用程序运行过程中更新对象的引用关系,则清除卡片表中与对象对应的标记位;实现线程管理功能时,利用本地操作系统的线程操作API对线程进行管理;实现解释器功能时,通过调用与应用程序对应的模板,实现应用程序的执行;其中,模板为基于所述MIPS平台的模板化解释器针对所述应用程序中每个字节码预先生成的本地MIPS指令集序列;实现编译器功能时,在针对所述本地MIPS指令集的即时编译器中生成MIPS指令的具体规则、根据所述本地MIPS指令集生成栈帧结构和参数传递规范,并针对所述本地MIPS指令集的后端指令进行优化。从而实现对MIPS平台运行的Java应用程序的良好支持。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明支持MIPS平台的Java虚拟机实现方法实施例一的流程图;
图2为本发明支持MIPS平台的Java虚拟机实现方法实施例二的流程图;
图3为本发明支持MIPS平台的Java虚拟机实现装置实施例一的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先需要说明的是,龙芯处理器是一款符合MIPS指令集架构的通用处理器,片内集成高性能处理器核、内存控制器和可定制的输入/输出(Input/Output,简称:I/O)设备控制器,主要面向计算、服务器和桌面应用等领域。Java虚拟机是一种支持平台无关字节码指令集的系统软件,Java语言在计算机领域有普遍应用,任何硬件系统都必须配备相应的Java虚拟机才能支持Java应用程序的运行,因此,针对龙芯处理器的特点,实现面向MIPS平台的Java虚拟机系统具有很强的实用价值。
本发明实施例在硬件方面,需要使用提供龙芯处理器的硬件平台;在软件方面,要求在提供龙芯处理器的硬件平台上调试好系统引导程序(BootLoader)、操作系统内核(OSKernel)以及基本文件系统(FileSystem)。下面对本发明实施例提供的支持MIPS平台的Java虚拟机实现方法进行具体说明。
图1为本发明支持MIPS平台的Java虚拟机实现方法实施例一的流程图。如图1所示,本实施例提供的方法可以包括:
步骤101、实现安全点功能时,若应用程序访问页面所产生的信号满足预设条件,则认为所述信号是安全点信号。
在实现运行应用程序时的环境子系统时,需要建立Java方法以执行计数功能、原子指令和并发控制功能、Java反射(reflection)功能、安全点(safepoint)和信号处理功能。
本步骤中,在实现安全点功能时,若所述应用程序访问页面时产生信号的指令是访存指令,且所述访存指令所访问的内存地址是指定页面,则认为所述信号是所述安全点信号。
具体来说,本步骤中安全点功能即为采用访问非可读页面的方式实现对线程的暂停,例如,在进行垃圾回收之前,为了停止所有执行中的Java线程,虚拟机预先将指定页面作为安全点页面,并将指定页面的访问权限修改为“不可读”;当所有的Java线程执行到安全点页面、对安全点页面进行读操作时,由于安全点页面的访问权限为“不可读”,因此会产生段错误信号,并在事先注册的信号处理函数中阻塞住,直到垃圾回收完成后再恢复运行;进一步,由于在Java线程运行过程中,还有可能由于程序本身的缺陷产生信号,因此,Java虚拟机需要识别产生信号的指令,只有当产生信号的指令是访存指令,即,MIPS中是lw指令或ld指令,并且访存指令访问的内存地址是指定页面时,才会认为所述信号是安全点信号。
步骤102、实现内存管理功能时,若所述应用程序运行过程中更新对象的引用关系,则清除卡片表中与所述对象对应的标记位。
内存管理功能是在内存管理子系统中实现的,是指向操作系统请求分配一段连续堆空间(Heap),为Java线程提供动态分配对象的接口,并在分配的堆空间耗尽全部空间时,启动垃圾回收功能(GarbageCollection)做堆紧缩。
本步骤中,在实现内存管理功能时,在堆空间中创建对象时管理卡片表(CardTable),具体的,卡片表是用于辅助垃圾回收的数据结构,若所述应用程序运行过程中更新对象的引用关系,则清除卡片表中与所述对象对应的标记位。例如,在MIPS中实现清除卡片表相应的标记位可以采用以下指令:
;;设定obj为对象首地址,卡片表以29字节为一个单位
luiAT,high16(card_table)
oriAT,AT,low16(card_table)
shlnew-obj,obj,9
addAT,AT,new_obj
sbR0,0(AT)
其中,luiAT,high16(card_table)表示将内存中卡片表首地址的高16位加载到寄存器AT的高16位;oriAT,AT,low16(card_table)表示将内存中卡片表首地址的低16位与AT进行逻辑或运算,并将运算结果加载到寄存器AT的低16位;即,通过luiAT,high16(card_table)和oriAT,AT,low16(card_table)将卡片表的首地址加载到寄存器AT中;shlnew-obj,obj,9表示将首地址逻辑右移9位;addAT,AT,new_obj表示将寄存器AT中的首地址与右移9位后的首地址相加,并将结果保存在AT寄存器中;sbR0,0(AT)表示将寄存器R0的值(恒为0)作为一个字节写入寄存器AT指向的内存单元中。
步骤103、实现线程管理功能时,利用本地操作系统的线程操作应用程序编程接口(ApplicationProgrammingInterface,简称:API)对线程进行管理;其中,所述对线程进行管理包括:创建线程、终止线程、暂停线程、线程的同步以及线程的互斥。
线程管理功能是在线程管理子系统中实现的,是指虚拟机利用本地操作系统的线程操作API实现Java线程的管理。
本步骤中,在实现内存管理功能时,虚拟机利用本地MIPSLinux内核提供的线程操作API对线程进行管理,例如,创建线程pthread_create()、线程同步pthread_join()。
步骤104、实现解释器功能时,通过调用与所述应用程序对应的模板,实现所述应用程序的执行;其中,所述模板为基于所述MIPS平台的模板化解释器针对所述应用程序中每个字节码预先生成的本地MIPS指令集序列。
解释器功能是在解释器子系统中实现的,是指对Java应用程序实现解释执行。
本步骤中,模板为基于MIPS平台的模板化解释器针对应用程序中每个字节码预先生成的本地MIPS指令集序列;通过直接将应用程序的执行过程转化为相应的模板调用过程,可以提高执行应用程序的效率。
例如,本实施例中,以表示将两个整数相加的Java字节码iadd为例,其对应的MIPS模板为:
lwV0,0(SP)
lwV1,4(SP)
addiSP,SP,8
adduV0,V1,V0
addiS0,SP,-4
swV0,0(SP)
其中,lwV0,0(SP)表示从寄存器SP指向的栈顶第一单元读取第一操作数并保存到寄存器V0中;lwV1,4(SP)表示从寄存器SP指向的栈顶第二单元中读取第二操作数并保存到寄存器V1中;addiSP,SP,8表示将寄存器SP中的数值加8再保存到寄存器SP中;adduV0,V1,V0表示将寄存器V0中的数值和寄存器V1中的数值相加,并保存到寄存器V0中;addiS0,SP,-4表示将寄存器SP中的数值加上-4后保存到寄存器SP中;swV0,0(SP)表示将寄存器V0的值保存到SP指向的栈顶单元中。
再例如,以Java字节码new为例,其对应的MIPS模板为:
其中,adduAT,S0,V0表示将寄存器S0中包含的Heap区域的当前分配指针,与寄存器中包含V0的对象大小(字节数)相加,其结果代表要分配的末尾位置;bgeAT,S1,overflow表示将要分配的末尾位置与Heap区域的末尾指针相比较,如果超过了Heap区域的末尾指针,则表示堆分配发生溢出,要跳转到overflow标号位置的语句,执行jalRuntime::gc()函数调用,进行垃圾回收处理。如果未发生堆溢出,则swS0,0(SP)表示将Heap区域的当前分配指针做为新分配对象的首地址,保存到寄存器SP指向的栈顶单元;moveS0,AT表示将Heap区域的当前分配指针后移,指向下一个新分配对象的位置。
步骤105、实现编译器功能时,在针对所述本地MIPS指令集的即时编译器中生成MIPS指令的具体规则、根据所述本地MIPS指令集生成栈帧结构和参数传递规范,并针对所述本地MIPS指令集的后端指令进行优化。
编译器功能是在MIPS即时编译器子系统中实现的,所述编译器是针对MIPS指令集的即时编译器,可以将Java字节码翻译成同等功能的MIPS机器指令。
例如,本步骤中,以Java方法add()为例说明编译器功能的实现,其翻译结果为:
(a)在针对MIPS指令集的即时编译器中生成MIPS指令的具体规则的程序样例为:
(b)add方法的调用栈帧结构和参数传递规范程序样例为:
#int(Test:NotNull*,int,int)
#
#r012t0:parm0:Test:NotNull*
#r050a0:parm1:int
#r051a1:parm2:int
#--Oldsp--Framesize:16--
#r069sp+12:pad2,in_preserve
#r068sp+8:pad2,in_preserve
#r067sp+4:pad2,in_preserve
#r066sp+0:Fixedslot0
#
(c)翻译结果(MIPS指令)的程序样例为:
上面的片断(a)是Java源代码,classTest定义了一个类,包含两个方法。其中main方法是程序执行的第一个方法,调用add方法进行加法运行,并打印计算结果。片断(b)是即时编译器对add方法生成的栈帧布局和参数传递方式,前三行(r012、r050、r051)表示该方法的参数通过三个寄存器(t0、a0、a1)传入,Framesize代表该方法的栈帧是16字节,每4个字节做为一个栈帧单元,分别保存方法运行过程中的局部数据。片断(c)是即时编译器对add方法生成的MIPS指令序列,“020B1”表示该方法只有一个基本块,swRA,SP,-4至subSP,SP,16四条指令是方法的入口指令,建立了本次运行的栈帧,并且将调用者的现场信息(在RA、FP两个寄存器中)保存在栈帧中。“addV0,A0,A1”一句是方法的主体功能,执行加法运算。后面的指令是方法的出口指令,分别用于撤销栈帧、恢复现场信息、检查安全点、返回调用者。
本实施例的技术方案,可以通过实现安全点功能时,若应用程序访问页面所产生的信号满足预设条件,则将页面作为安全点页面;实现内存管理功能时,若应用程序运行过程中更新对象的引用关系,则清除卡片表中与对象对应的标记位;实现线程管理功能时,利用本地操作系统的线程操作API对线程进行管理;实现解释器功能时,通过调用与应用程序对应的模板,实现应用程序的执行;其中,模板为基于所述MIPS平台的模板化解释器针对所述应用程序中每个字节码预先生成的本地MIPS指令集序列;实现编译器功能时,在针对所述本地MIPS指令集的即时编译器中生成MIPS指令的具体规则、根据所述本地MIPS指令集生成栈帧结构和参数传递规范,并针对所述本地MIPS指令集的后端指令进行优化。从而实现对龙芯平台运行的Java应用程序的良好支持。
图2为本发明支持MIPS平台的Java虚拟机实现方法实施例二的流程图。如图2所示,在上述实施例的基础上,在步骤101之前,本实施例提供的方法还可以包括:
步骤201、实现类文件装载功能时,读取所述应用程序的类文件,并在所述类文件格式的有效性验证通过后,将所述类文件转换为内部的数据结构注册到类管理器中。
类文件装载功能是在类文件装载子系统中实现的,是指对由Java字节码构成的应用程序类文件(.class)进行文件读取,验证其格式的有效性,并在有效性验证通过后,将类文件转换为虚拟机内部的数据结构,并注册到类管理器中。
本实施例的技术方案,可以实现对MIPS平台运行的Java应用程序的良好支持。
图3为本发明支持MIPS平台的Java虚拟机实现装置实施例一的结构示意图。如图3所示,本实施例提供的支持MIPS平台的Java虚拟机实现装置10具体可以包括:安全点模块11、内存管理模块12、线程管理模块13、解释器模块14以及编译器模块15。
其中,安全点模块11用于实现安全点功能时,若应用程序访问页面所产生的信号满足预设条件,则认为所述信号是安全点信号;
内存管理模块12用于实现内存管理功能时,若所述应用程序运行过程中更新对象的引用关系,则清除卡片表中与所述对象对应的标记位;
线程管理模块13用于实现线程管理功能时,利用本地操作系统的线程操作应用程序编程接口API管理线程;其中,所述管理线程包括创建线程、终止线程、暂停线程、线程的同步以及线程的互斥;
解释器模块14用于实现解释器功能时,通过调用与所述应用程序对应的模板,实现所述应用程序的执行;其中,所述模板为基于所述MIPS平台的模板化解释器针对所述应用程序中每个字节码预先生成的本地MIPS指令集序列;
编译器模块15用于实现编译器功能时,在针对所述本地MIPS指令集的即时编译器中生成MIPS指令的具体规则、根据所述本地MIPS指令集生成栈帧结构和参数传递规范,并针对所述本地MIPS指令集的后端指令进行优化。
进一步,所述安全点模块11具体用于若所述应用程序访问页面时产生信号的指令是访存指令,且所述访存指令所访问的内存地址是指定页面,则认为所述信号是所述安全点信号。具体的,在认为所述信号时所述安全点信号时,所述安全点模块11具体通过采用访问非可读页面的方式实现对所述线程的暂停。
需要说明的是,所述内存管理模块12在清除卡片表中与所述对象对应的标记位时,将所述卡片表的首地址加载到第一寄存器中,将经过逻辑运算后的所述首地址与加载到所述第一寄存器中的所述首地址相加,并将结果保存在所述第一寄存器中,再将第二寄存器的值作为一个字节写入所述第一寄存器指向的内存单元中;其中,所述第二寄存器的值恒为零。
进一步的,本实施例提供的支持MIPS平台的Java虚拟机实现装置10还可以包括类文件装载模块16,用于实现类文件装载功能时,读取所述应用程序的类文件,并在所述类文件格式的有效性验证通过后,将所述类文件转换为内部的数据结构注册到类管理器中。
本实施例的支持MIPS平台的Java虚拟机实现装置,可用于执行上述方法实施例的技术方案,其实现原理与技术效果类似,此处不再赘述。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(RandomAccessMemory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种支持无内部互锁流水级的微处理器MIPS平台的Java虚拟机实现方法,其特征在于,包括:
实现安全点功能时,若应用程序访问页面所产生的信号满足预设条件,则认为所述信号是安全点信号;
实现内存管理功能时,若所述应用程序运行过程中更新对象的引用关系,则清除卡片表中与所述对象对应的标记位;
实现线程管理功能时,利用本地操作系统的线程操作应用程序编程接口API对线程进行管理;其中,所述对线程进行管理包括:创建线程、终止线程、暂停线程、线程的同步以及线程的互斥;
实现解释器功能时,通过调用与所述应用程序对应的模板,实现所述应用程序的执行;其中,所述模板为基于所述MIPS平台的模板化解释器针对所述应用程序中每个字节码预先生成的本地MIPS指令集序列;
实现编译器功能时,在针对所述本地MIPS指令集的即时编译器中生成MIPS指令的具体规则、根据所述本地MIPS指令集生成栈帧结构和参数传递规范,并针对所述本地MIPS指令集的后端指令进行优化。
2.根据权利要求1所述的方法,其特征在于,所述实现安全点功能时,若应用程序访问页面所产生的信号满足预设条件,则认为所述信号是安全点信号,包括:
若所述应用程序访问页面时产生信号的指令是访存指令,且所述访存指令所访问的内存地址是指定页面,则认为所述信号是所述安全点信号。
3.根据权利要求2所述的方法,其特征在于,所述认为所述信号时所述安全点信号包括:采用访问非可读页面的方式实现对所述线程的暂停。
4.根据权利要求1所述的方法,其特征在于,所述实现内存管理功能时,若所述应用程序运行过程中更新对象的引用关系,则清除卡片表中与所述对象对应的标记位,包括:
将所述卡片表的首地址加载到第一寄存器中,将经过逻辑运算后的所述首地址与加载到所述第一寄存器中的所述首地址相加,并将结果保存在所述第一寄存器中,再将第二寄存器的值作为一个字节写入所述第一寄存器指向的内存单元中;其中,所述第二寄存器的值恒为零。
5.根据权利要求1-4任一所述的方法,其特征在于,所述实现安全点功能之前,还包括:
实现类文件装载功能时,读取所述应用程序的类文件,并在所述类文件格式的有效性验证通过后,将所述类文件转换为内部的数据结构注册到类管理器中。
6.一种支持无内部互锁流水级的微处理器MIPS平台的Java虚拟机实现装置,其特征在于,包括:
安全点模块,用于实现安全点功能时,若应用程序访问页面所产生的信号满足预设条件,则认为所述信号是所述安全点信号;
内存管理模块,用于实现内存管理功能时,若所述应用程序运行过程中更新对象的引用关系,则清除卡片表中与所述对象对应的标记位;
线程管理模块,用于实现线程管理功能时,利用本地操作系统的线程操作应用程序编程接口API管理线程;其中,所述管理线程包括创建线程、终止线程、暂停线程、线程的同步以及线程的互斥;
解释器模块,用于实现解释器功能时,通过调用与所述应用程序对应的模板,实现所述应用程序的执行;其中,所述模板为基于所述MIPS平台的模板化解释器针对所述应用程序中每个字节码预先生成的本地MIPS指令集序列;
编译器模块,用于实现编译器功能时,在针对所述本地MIPS指令集的即时编译器中生成MIPS指令的具体规则、根据所述本地MIPS指令集生成栈帧结构和参数传递规范,并针对所述本地MIPS指令集的后端指令进行优化。
7.根据权利要求6所述的装置,其特征在于,所述安全点模块具体用于:
若所述应用程序访问页面时产生信号的指令是访存指令,且所述访存指令所访问的内存地址是指定页面,则认为所述信号是所述安全点信号。
8.根据权利要求7所述的装置,其特征在于,所述安全点模块具体用于采用访问非可读页面的方式实现对所述线程的暂停。
9.根据权利要求6所述的装置,其特征在于,所述内存管理模块具体用于:
将所述卡片表的首地址加载到第一寄存器中,将经过逻辑运算后的所述首地址与加载到所述第一寄存器中的所述首地址相加,并将结果保存在所述第一寄存器中,再将第二寄存器的值作为一个字节写入所述第一寄存器指向的内存单元中;其中,所述第二寄存器的值恒为零。
10.根据权利要求6-9任一所述的装置,其特征在于,所述装置还包括类文件装载模块:
用于实现类文件装载功能时,读取所述应用程序的类文件,并在所述类文件格式的有效性验证通过后,将所述类文件转换为内部的数据结构注册到类管理器中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410426143.9A CN105373414B (zh) | 2014-08-26 | 2014-08-26 | 支持MIPS平台的Java虚拟机实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410426143.9A CN105373414B (zh) | 2014-08-26 | 2014-08-26 | 支持MIPS平台的Java虚拟机实现方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105373414A true CN105373414A (zh) | 2016-03-02 |
CN105373414B CN105373414B (zh) | 2018-11-20 |
Family
ID=55375640
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410426143.9A Active CN105373414B (zh) | 2014-08-26 | 2014-08-26 | 支持MIPS平台的Java虚拟机实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105373414B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018133713A1 (zh) * | 2017-01-23 | 2018-07-26 | 阿里巴巴集团控股有限公司 | 一种线程管理方法及装置 |
CN108829395A (zh) * | 2018-06-19 | 2018-11-16 | 中国电子科技集团公司第四十研究所 | 一种面向信号驱动程序代码自动生成方法及装置 |
CN109408197A (zh) * | 2018-09-29 | 2019-03-01 | 上海理想信息产业(集团)有限公司 | 一种边缘计算引擎的实现方法及装置 |
CN112698912A (zh) * | 2020-12-29 | 2021-04-23 | 成都融微软件服务有限公司 | 一种Java Card虚拟机运行环境及内存管理方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1484787A (zh) * | 2000-10-05 | 2004-03-24 | Arm | 处理器流水线中的硬件指令翻译 |
US20100100575A1 (en) * | 2008-10-16 | 2010-04-22 | Joshua Seth Auerbach | Lock Deferral for Real-Time Garbage Collection |
US20100192139A1 (en) * | 2009-01-23 | 2010-07-29 | Sun Microsystems, Inc. | Efficient per-thread safepoints and local access |
-
2014
- 2014-08-26 CN CN201410426143.9A patent/CN105373414B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1484787A (zh) * | 2000-10-05 | 2004-03-24 | Arm | 处理器流水线中的硬件指令翻译 |
US20100100575A1 (en) * | 2008-10-16 | 2010-04-22 | Joshua Seth Auerbach | Lock Deferral for Real-Time Garbage Collection |
US20100192139A1 (en) * | 2009-01-23 | 2010-07-29 | Sun Microsystems, Inc. | Efficient per-thread safepoints and local access |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018133713A1 (zh) * | 2017-01-23 | 2018-07-26 | 阿里巴巴集团控股有限公司 | 一种线程管理方法及装置 |
CN108829395A (zh) * | 2018-06-19 | 2018-11-16 | 中国电子科技集团公司第四十研究所 | 一种面向信号驱动程序代码自动生成方法及装置 |
CN109408197A (zh) * | 2018-09-29 | 2019-03-01 | 上海理想信息产业(集团)有限公司 | 一种边缘计算引擎的实现方法及装置 |
CN112698912A (zh) * | 2020-12-29 | 2021-04-23 | 成都融微软件服务有限公司 | 一种Java Card虚拟机运行环境及内存管理方法 |
CN112698912B (zh) * | 2020-12-29 | 2024-04-26 | 成都融微软件服务有限公司 | 一种Java Card虚拟机运行环境及内存管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105373414B (zh) | 2018-11-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112015491B (zh) | 实现函数跳转的方法、装置及计算机存储介质 | |
CN101002174B (zh) | 在便携式装置中加载具有面向对象的中间语言的软件的方法 | |
US7949848B2 (en) | Data processing apparatus, method and computer program product for reducing memory usage of an object oriented program | |
US20200249925A1 (en) | On-demand loading of dynamic scripting language code for reduced memory usage | |
US9558096B2 (en) | Method and apparatus for supporting performance analysis | |
CN110262783B (zh) | 一种接口生成方法、装置及终端设备 | |
CN113296786B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
US10268497B2 (en) | Conjugate code generation for efficient dynamic optimizations | |
US10073687B2 (en) | System and method for cross-building and maximizing performance of non-native applications using host resources | |
CN105373414A (zh) | 支持MIPS平台的Java虚拟机实现方法及装置 | |
US20230315416A1 (en) | Code translation method and apparatus, and device | |
US11301225B2 (en) | Reducing application startup time by generating bytecode from metadata at build time | |
CN104156234A (zh) | 启动多核处理器、bootloader大小端模式自适应的方法及装置 | |
US20240134666A1 (en) | Hybrid just in time load module compiler with performance optimizations | |
CN101620573A (zh) | X86体系结构内存管理单元虚拟化方法 | |
CN104007956B (zh) | 一种操作系统进程识别跟踪及信息获取的方法和装置 | |
US20150100834A1 (en) | Processing core data produced by a computer process | |
JP2012053679A (ja) | 最適化装置、最適化方法およびコンパイラ・プログラム | |
CN115629795A (zh) | 一种可执行文件的配置方法、装置及电子设备 | |
CN114706586A (zh) | 代码编译、代码运行方法、装置、计算机设备及存储介质 | |
CN111273913B (zh) | 一种输出规范表示的应用程序接口数据的方法及装置 | |
US20240256236A1 (en) | Annotation aware efficient application build management | |
CN114443210A (zh) | Linux系统分区镜像文件的仿真方法及装置 | |
CN114048175A (zh) | 多语言文件生成方法及装置 | |
CN116931947A (zh) | 一种优化wasm字节码的方法及执行方法、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee after: Loongson Zhongke Technology Co.,Ltd. Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd. |