面向非易失性内存的JavaScript对象持久化框架制造技术

技术编号:24572526 阅读:23 留言:0更新日期:2020-06-20 23:56
本发明专利技术公开了一种面向非易失性内存的JavaScript对象持久化框架,包括:持久性对象池模块、共享内存模块、数据一致性保障模块以及垃圾回收模块;持久性对象池模块负责创建与管理JavaScript持久性对象;共享内存模块支持持久性对象池模块创建管理的JavaScript持久化对象并行访问共享持久内存;数据一致性保证模块为上层应用程序调用JavaScript持久化对象提供一致性保障机制;垃圾回收模块负责回收处理无效的JavaScript持久化对象所占用的内存。本发明专利技术所述框架能够较为便捷的添加至现有的V8网页引擎当中,所述方法也可以方便的移植到面向非易失性内存的数据库系统中,具有广泛的市场应用价值。

JavaScript object persistence framework for nonvolatile memory

【技术实现步骤摘要】
面向非易失性内存的JavaScript对象持久化框架
本专利技术涉及非易失性内存对象管理
,具体地,涉及一种面向非易失性内存的JavaScript对象持久化框架。
技术介绍
非易失性内存(Non-VolatileMemory,NVM)是指新一代存储介质,其自身接近传统DRAM内存级别访存速度,同时兼具HDD、SSD等外存设备的数据持久性以及大密度存储等特性。NVM被认为是下一代内存存储体系结构的发展方向,Intel和Micron提出的3DXPoint技术已提供了商用化的NVM解决方案。面向对象编程及其相关思想一直都是高级编程语言中的重要组成部分。作为其中的关键,“对象”这一概念的高效实现也是高级语言设计必须考虑的因素之一。在许多应用场景下,对象还需要保证持久性:即断电之后数据恢复的能力。基于NVM的访问速度和可按字节寻址的特性,高级语言可以直接在持久内存上创建和访问持久对象。这使得持久对象仅需要在NVM上保存一份副本,无需额外的数据传输。另外,持久对象在NVM中的结构即为对象本身的结构,所以无需再进行序列化或者反序列化。目前,一些高级编程语言(如Python,JavaScript等)并不支持对NVM设备的访问,用户无法用语言本身编写相关的库来支持基于NVM的持久对象存储。另一方面,持久对象在内存管理和实现方面与普通对象有较大差异。
技术实现思路
针对现有技术中的缺陷,本专利技术的目的是提供一种面向非易失性内存的JavaScript对象持久化框架。根据本专利技术提供的一种面向非易失性内存的JavaScript对象持久化框架,包括:持久性对象池模块、共享内存模块、数据一致性保障模块以及垃圾回收模块;持久性对象池模块负责创建与管理JavaScript持久性对象;共享内存模块支持持久性对象池模块创建管理的JavaScript持久化对象并行访问共享持久内存;数据一致性保证模块为上层应用程序调用JavaScript持久化对象提供一致性保障机制;垃圾回收模块负责回收处理无效的JavaScript持久化对象所占用的内存。优选地,所述持久性对象池模块由以下部分组成:根、类型表、根对象以及对象缓存。优选地,所述根是进程访问所述持久性对象池模块中的内存的入口,通过libpmemobj中的root()方法得到的固定大小的内存区域;所述根会在持久对象池被创建时被初始化。优选地,所述类型表记录了所述持久性对象池模块中所有持久对象的类型信息,并且提供了一个从类型码到具体类型的映射。优选地,在所述持久性对象池模块中,根对象为程序唯一可直接通过对象池访问到的持久对象,所有其它地持久对象都必须被根对象直接或间接地引用,否则在垃圾回收的过程中,这些对象会被视为垃圾从而被清理。优选地,在所述持久性对象池模块中,对象缓存首先会记录持久内存中被频繁读写的位置;在所述持久性对象池模块中,对象缓存还可通过暂存持久数据来减少持久内存上的冗余数据;所述对象缓存可暂存那些被写入持久内存中的数据在持久内存中的地址,当下次需要写入同样的数据时,即可直接返回被缓存的地址。优选地,利用所述持久化对象池模块来创建和管理JavaScript持久化对象,步骤包括:步骤S1:通过指定参数创建对象池;步骤S2:对象池初始化创建根对象;步骤S3:在对象池上创建持久对象,并让其被根对象直接或间接引用;步骤S4:直接读写持久对象,相应数据会从持久内存中被读出或写入持久内存;步骤S5:终止程序,此时未被根对象直接或间接引用的对象会被回收释放;步骤S6:重启程序,打开上次创建的对象池,通过根对象找到之前写入的持久对象。优选地,所述共享内存模块能够支持JavaScript对象访问共享持久内存。优选地,所述共享内存模块设计实现了一个PersistentArrayBuffer对象,以二进制数据缓冲区的方式访问和管理内存;PAB可用于管理持久内存;在使用所述共享内存模块处理并发任务时,每个进程需要在自己的地址空间中维护一个PAB对象,用以进行持久内存的分配、管理和访问;多个进程可以通过其PAB对象映射到同一内存区域的方式实现持久内存共享,进而基于共享内存实现进程间通信;对于并发编程中常见的一致性控制问题,所述共享内存模块进行原子化操作相关设计,避免发生写冲突、重复写以及死锁问题。优选地,所述数据一致性保障模块通过原子操作和事务机制两个层面的保证来确保持久对象的数据一致性;所述垃圾回收模块实现了一套结合了引用计数和可达性分析的垃圾回收算法,对持久性对象进行分代回收。与现有技术相比,本专利技术具有如下的有益效果:1、本专利技术所述框架为高级编程语言提供了持久化编程方案,并在对应程序软件中提高了系统整体效率。2、本专利技术所述框架能够较为便捷的添加至现有的V8网页引擎当中,所述方法也可以方便的移植到面向非易失性内存的数据库系统中,具有广泛的市场应用价值。附图说明通过阅读参照以下附图对非限制性实施例所作的详细描述,本专利技术的其它特征、目的和优点将会变得更明显:图1是本专利技术提供的总体框架示意图;图2是本专利技术提供的图1中持久性对象池架构图;图3是本专利技术提供的图2的持久对象调用示意图;图4是本专利技术提供的图1中的共享内存模块组成和原理概况示意图;图5是本专利技术提供的图1中共享内存模块中多进程使用PAB分配和内存映射的示意图;图6是本专利技术提供的图1中数据一致性保障模块中事务机制示意图;图7是本专利技术提供的图1中的垃圾回收模块中引用计数结构图。具体实施方式下面结合具体实施例对本专利技术进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本专利技术,但不以任何形式限制本专利技术。应当指出的是,对本领域的普通技术人员来说,在不脱离本专利技术构思的前提下,还可以做出若干变化和改进。这些都属于本专利技术的保护范围。根据本专利技术提供的一种面向非易失性内存的JavaScript对象持久化框架,包括:持久性对象池模块、共享内存模块、数据一致性保障模块以及垃圾回收模块;持久性对象池模块负责创建与管理JavaScript持久性对象;共享内存模块支持持久性对象池模块创建管理的JavaScript持久化对象并行访问共享持久内存;数据一致性保证模块为上层应用程序调用JavaScript持久化对象提供一致性保障机制;垃圾回收模块负责回收处理无效的JavaScript持久化对象所占用的内存。具体地,所述持久性对象池模块由以下部分组成:根、类型表、根对象以及对象缓存。具体地,所述根是进程访问所述持久性对象池模块中的内存的入口,通过libpmemobj中的root()方法得到的固定大小的内存区域;所述根会在持久对象池被创建时被初始化。具体地,所述类型表记录了所述持久性本文档来自技高网...

【技术保护点】
1.一种面向非易失性内存的JavaScript对象持久化框架,其特征在于,包括:持久性对象池模块、共享内存模块、数据一致性保障模块以及垃圾回收模块;/n持久性对象池模块负责创建与管理JavaScript持久性对象;/n共享内存模块支持持久性对象池模块创建管理的JavaScript持久化对象并行访问共享持久内存;/n数据一致性保证模块为上层应用程序调用JavaScript持久化对象提供一致性保障机制;/n垃圾回收模块负责回收处理无效的JavaScript持久化对象所占用的内存。/n

【技术特征摘要】
1.一种面向非易失性内存的JavaScript对象持久化框架,其特征在于,包括:持久性对象池模块、共享内存模块、数据一致性保障模块以及垃圾回收模块;
持久性对象池模块负责创建与管理JavaScript持久性对象;
共享内存模块支持持久性对象池模块创建管理的JavaScript持久化对象并行访问共享持久内存;
数据一致性保证模块为上层应用程序调用JavaScript持久化对象提供一致性保障机制;
垃圾回收模块负责回收处理无效的JavaScript持久化对象所占用的内存。


2.根据权利要求1所述的面向非易失性内存的JavaScript对象持久化框架,其特征在于,所述持久性对象池模块由以下部分组成:根、类型表、根对象以及对象缓存。


3.根据权利要求2所述的面向非易失性内存的JavaScript对象持久化框架,其特征在于,所述根是进程访问所述持久性对象池模块中的内存的入口,通过libpmemobj中的root()方法得到的固定大小的内存区域;
所述根会在持久对象池被创建时被初始化。


4.根据权利要求2所述的面向非易失性内存的JavaScript对象持久化框架,其特征在于,所述类型表记录了所述持久性对象池模块中所有持久对象的类型信息,并且提供了一个从类型码到具体类型的映射。


5.根据权利要求2所述的面向非易失性内存的JavaScript对象持久化框架,其特征还在于,在所述持久性对象池模块中,根对象为程序唯一可直接通过对象池访问到的持久对象,所有其它地持久对象都必须被根对象直接或间接地引用,否则在垃圾回收的过程中,这些对象会被视为垃圾从而被清理。


6.根据权利要求2所述的面向非易失性内存的JavaScript对象持久化框架,其特征还在于,在所述持久性对象池模块中,对象缓存首先会记录持久内存中被频繁读写的位置;
在所述持久性对象池模块中,对象缓存还可通过暂存持久数据来减少持久内存上的冗余数据;
所述对象缓存可暂存那些被写入...

【专利技术属性】
技术研发人员:郑圣安黄林鹏沈艳艳陈雨亭舒继武游理通
申请(专利权)人:上海交通大学清华大学
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1