本发明涉及计算机软件,具体地说,涉及一种永久对象创建方法、装置、设备、介质及产品。
背景技术:
1、jcvm(java card virtual machine,java card虚拟机)是java虚拟机的子集,因其具备跨硬件平台的特点,目前已作为智能卡设备的主流实现方案。jcvm的一个重要技术特征就是jcvm应用开发者可以通过new操作符创建一个永久对象,永久对象的成员和创建方法均在非易失性存储空间上的,掉电不丢失,这对于保存用户身份/存款/密钥等信息尤为重要。
2、尽管jcvm在开发应用上具有便利性,却存在很大的专利风险。现有不少智能卡的厂商转而开发基于特定硬件平台的原生操作系统,原生操作系统中虽然也可以创建对象实例,但因为c++编译器的特性,这些对象实例的成员只能创建在ram内存中,因此不具备掉电保存的能力,无法实现永久对象的创建。
技术实现思路
1、为了解决上述问题,本发明提出一种永久对象创建方法、装置、设备、介质及产品,能够基于原生操作系统实现永久对象的创建。
2、本发明实施例提供一种永久对象创建方法,包括:
3、在ram中构建非易失性变量,并在flash空间中为所述非易失性变量分配相应大小的存储块;
4、将所述非易失性变量的构造顺序号作为其id号与所述存储块的索引号进行绑定,并存储在预设的存储区域。
5、优选地,所述在ram中构建非易失性变量,并在flash空间中为所述非易失性变量分配相应大小的存储块,包括:
6、在ram空间的applet实例中建立int数据对象,并在flash空间中建立一个4字节的存储块;或,
7、在ram空间的applet实例中建立short数据对象,并在flash空间中建立一个2字节的存储块;或,
8、在ram空间的applet实例中建立byte数据对象,并在flash空间中建立一个1字节的存储块。
9、优选地,所述方法还包括:
10、将ram中同一applet实例创建的非易失性变量的绑定信息按照构造顺序号的顺序依次保存在构建的绑定信息链表中。
11、进一步地,所述绑定信息链表包括同一applet实例创建的n组非易失性变量的绑定信息的空间块;
12、所述flash链表包括一个头节点,所述头节点中保存有该applet实例创建的第1个非易失性变量的空间块的索引号;
13、第i组绑定信息的空间块包括该applet实例创建的第i个非易失性变量的id号、对应存储块的索引号以及第i+1个非易失性变量的空间块的索引号;
14、第n组绑定信息包括该applet实例创建的第n个非易失性变量的id号以及对应存储块的索引号;
15、其中,i=1,2,…,n-1,n为不小于1的正整数。
16、优选地,所述在ram中构建非易失性变量,并在flash空间中创建相应大小存储块,包括:
17、根据构建的非易失性变量的类型在预设的nvobject类库中匹配对应的nvobject类的构造函数;
18、根据所述构造函数的静态成员变量的计数值作为所述非易失性变量的id号;
19、在预设的绑定信息链表中查询所述id号是否存在绑定的存储块;
20、若否,在flash空间中申请与所述类型对应大小的存储块,得到存储块的索引号;
21、若是,将查询到的索引号搭配所述nvobject类的nvid中,将查询到的存储块的大小保存到所述nvobject类的nvsz中。
22、进一步地,所述方法还包括:
23、当接收到所述非易失性变量的写入操作指令时,调用所述nvobject类的setval函数完成所述flash空间中存储块的写入操作;或,
24、当接收到所述非易失性变量的读取操作指令时,调用所述nvobject类的getval函数完成所述flash空间中存储块的读取操作。
25、优选地,所述方法还包括:
26、当所述applet实例对应的applet应用被卸载时,将所述绑定信息链表中的绑定信息删除,并释放所述flash空间中的存储块。
27、进一步地,将所述绑定信息链表中的绑定信息删除,并释放所述flash空间中的存储块,包括:
28、从所述绑定信息链表的头节点的索引号寻址到第1个非易失性变量的空间块,缓存从第1个绑定信息的空间块中读取的第2个非易失性变量的空间块的索引号,释放第1个绑定信息的空间块和所述flash空间中对应的存储块;
29、根据第j个非易失性变量的绑定信息的空间块的索引号寻址到第j个非易失性变量的空间块,缓存从第j个绑定信息的空间块中读取的第j+1个非易失性变量的绑定信息的空间块的索引号,释放第j个绑定信息的空间块和所述flash空间中对应的存储块;
30、根据第n个非易失性变量的绑定信息的空间块的索引号寻址到第n个非易失性变量的空间块,释放第n个绑定信息的空间块和所述flash空间中对应的存储块;
31、其中,其中j=2,…,n-1。
32、本发明实施例还提供一种永久对象创建装置,所述装置包括:
33、构建模块,用于在ram中构建非易失性变量,并在flash空间中创建相应大小存储块;
34、绑定模块,用于将创建的非易失性变量的构造顺序号作为其id号与对应创建的存储块的索引号进行绑定,并存储在预设的存储区域。
35、优选地,所述构建模块具体用于:
36、在ram空间的applet实例中建立int数据对象,并在flash空间中建立一个4字节的存储块;或,
37、在ram空间的applet实例中建立short数据对象,并在flash空间中建立一个2字节的存储块;或,
38、在ram空间的applet实例中建立byte数据对象,并在flash空间中建立一个1字节的存储块。
39、优选地,所述装置还包括链表构建模块,用于:
40、将ram中同一applet实例创建的非易失性变量的绑定信息按照构造顺序号的顺序依次保存在构建的绑定信息链表中。
41、进一步地,所述绑定信息链表包括同一applet实例创建的n组非易失性变量的绑定信息的空间块;
42、所述flash链表包括一个头节点,所述头节点中保存有该applet实例创建的第1个非易失性变量的空间块的索引号;
43、第i组绑定信息的空间块包括该applet实例创建的第i个非易失性变量的id号、对应存储块的索引号以及第i+1个非易失性变量的空间块的索引号;
44、第n组绑定信息包括该applet实例创建的第n个非易失性变量的id号以及对应存储块的索引号;
45、其中,i=1,2,…,n-1,n为不小于1的正整数。
46、优选地,所述构建模块具体用于:
47、根据构建的非易失性变量的类型在预设的nvobject类库中匹配对应的nvobject类的构造函数;
48、根据所述构造函数的静态成员变量的计数值作为所述非易失性变量的id号;
49、在预设的绑定信息链表中查询所述id号是否存在绑定的存储块;
50、若否,在flash空间中申请与所述类型对应大小的存储块,得到存储块的索引号;
51、若是,将查询到的索引号搭配所述nvobject类的nvid中,将查询到的存储块的大小保存到所述nvobject类的nvsz中。
52、进一步地,所述装置还包括写入读取模块,用于:
53、当接收到所述非易失性变量的写入操作指令时,调用所述nvobject类的setval函数完成所述flash空间中存储块的写入操作;或,
54、当接收到所述非易失性变量的读取操作指令时,调用所述nvobject类的getval函数完成所述flash空间中存储块的读取操作。
55、优选地,所述装置还包括释放模块,用于:
56、当所述applet实例对应的applet应用被卸载时,将所述绑定信息链表中的绑定信息删除,并释放所述flash空间中的存储块。
57、优选地,所述释放模块,具体用于:
58、从所述绑定信息链表的头节点的索引号寻址到第1个非易失性变量的空间块,缓存从第1个绑定信息的空间块中读取的第2个非易失性变量的空间块的索引号,释放第1个绑定信息的空间块和所述flash空间中对应的存储块;
59、根据第j个非易失性变量的绑定信息的空间块的索引号寻址到第j个非易失性变量的空间块,缓存从第j个绑定信息的空间块中读取的第j+1个非易失性变量的绑定信息的空间块的索引号,释放第j个绑定信息的空间块和所述flash空间中对应的存储块;
60、根据第n个非易失性变量的绑定信息的空间块的索引号寻址到第n个非易失性变量的空间块,释放第n个绑定信息的空间块和所述flash空间中对应的存储块;
61、其中,其中j=2,…,n-1。
62、本发明实施例还提供一种终端设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如上述任一项实施例所述的一种永久对象创建方法。
63、本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如上述任一项实施例所述的一种永久对象创建方法。
64、本发明实施例还提供一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现上述任一项实施例所述方法的步骤。
65、与现有技术相比,本发明提供一种永久对象创建方法、装置、设备、介质及产品,通过在ram中构建非易失性变量,并在flash空间中为所述非易失性变量分配相应大小的存储块;将所述非易失性变量的构造顺序号作为其id号与所述存储块的索引号进行绑定,并存储在预设的存储区域。实现了applet类对象的永久化,实现基于原生操作系统的永久对象的创建。