一种基于JAVA的智能合约的内存管理方法与流程

文档序号:20163292发布日期:2020-03-24 21:14阅读:366来源:国知局
一种基于JAVA的智能合约的内存管理方法与流程

本发明涉及区块链技术,尤其涉及一种基于java的智能合约的内存管理方法。



背景技术:

智能合约是编程在区块链上的汇编语言,该术语是跨领域法律学者尼克·萨博提出来的,他对智能合约的定义是“一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议”,换句话说,智能合约就是一个在计算机系统上,当一定条件被满足后,可以被自动执行的合约。通常人们不会自己写字节码,但是会从更高级的语言来编译它,例如用java等类似的专用语言。

目前使用java的智能合约的内存管理方法的存在一定缺陷,用户在每次调用合约时,都需要对合约类进行反序列化以及类加载过程,减缓合约的调用时间,增大时延。进一步的,在区块链应用场景下,java虚拟机的垃圾回收机制也有一定的缺陷,目前市面上的java虚拟机会在内存不足情况下会对系统类和用户合约类进行回收。但在区块链场景下对频繁对类进行加载和回收,会严重影响执行效率。



技术实现要素:

针对现有技术的不足,本发明提出了一种基于java的智能合约内存管理方法,对java合约部署、调用、升级过程的内存进行管理,提高java合约的执行效率,具体技术方案如下:

一种基于java的智能合约的内存管理方法,所述的内存管理包括缓存用户合约类和对不同类进行不同的垃圾回收机制,其中,

对于缓存用户合约类,java虚拟机在接收到用户合约类解析的请求时,获取用户的合约部署地址和合约类,并将用户的合约类存入到内存中的一个缓存集合中,所述的缓存集合的索引为合约部署地址,当用户下次调用在这个合约部署地址的合约类时,将合约类从内存中取出,并将合约类的可修改的字段重置后返回给用户,保证合约类在每次返回给用户时都是一致的;

对不同类进行不同的垃圾回收机制具体包括以下三种情况:

(1)对java中的系统类,虚拟机不对其进行垃圾回收,所有系统类都在内存中的一块区域进行分配;

(2)对用户合约类,虚拟机自动地对其内存进行管理,虚拟机在内存中开辟一段缓存,在虚拟机缓存用户合约类时,虚拟机把用户合约类保存在缓存当中去,同时虚拟机对缓存进行缓存淘汰策略,当缓存内的数据的大小超过一定限制后,虚拟机用页面置换算法将某些用户合约类自动清除,以达到控制内存大小的目的;

(3)对于各个类的实例,虚拟机用java的垃圾回收算法对其清理。

进一步地,对于java中的系统类,虚拟机在启动的时候对其进行初始化。

进一步地,合约类的可修改字段为static字段。

进一步地,所述的页面置换算法具体为最近最久未使用算法。

进一步地,系统类、合约类和各个类的实例分别保存在三块不同的内存地址当中,彼此间不相重合。

本发明的有益效果:

本发明应用于区块链平台上,提供了一套全新的智能合约内存管理,实现了对合约类的缓存,使其不需要每次调用时都加载,提升了代码执行效率;在缓存的同时对缓存进行缓存淘汰机制,避免了内存溢出;修改java垃圾回收机制,让java垃圾回收更加高效;在虚拟机启动时对系统类进行初始化,加快了java代码的执行速度。

附图说明

图1是本发明的缓存存放内容图;

图2是读取缓存的流程图;

图3是lru缓存淘汰算法的示意图。

具体实施方式

下面根据附图和具体实施例详细描述本发明,本发明的目的和效果将变得更加明显。

本发明的基于java的智能合约生命周期管理方法,包括缓存用户合约类和对不同类进行不同的垃圾回收机制两个方便,其中,

对于缓存用户合约类,java虚拟机在接收到用户合约类解析的请求时,获取用户的合约部署地址和合约类,并将用户的合约类存入到内存中的一个缓存集合中,所述的缓存集合的索引为合约部署地址,当用户下次调用在这个合约部署地址的合约类时,将合约类从内存中取出,并将合约类的static字段重置后返回给用户,保证合约类在每次返回给用户时都是一致的;具体的缓存存放方式如图1所示,读取缓存的流程如图2所示。

对不同类进行不同的垃圾回收机制具体包括以下三种情况:

(1)对java中的系统类,虚拟机不对其进行垃圾回收,所有系统类都会在内存中的一块区域进行分配。

(2)对用户合约类,虚拟机自动地对其内存进行管理,虚拟机会在内存中维护一个缓存集合,在虚拟机缓存用户类的时候,虚拟机会向缓存集合中插入该类,同时虚拟机对缓存集合进行缓存淘汰策略,当缓存集合的大小超过一定限制后,虚拟机用页面置换算法lru将某些用户类手动清除,以达到控制内存大小的目的。该算法保留最近使用的合约类,淘汰距离上一次使用时间过长的合约类。具体的lru的算法的原理如图3所示。即虚拟机中的缓存集合统一维护用户类的存活时间,不由垃圾回收机制决定。

(3)对于各个类的实例,虚拟机用java的垃圾回收算法对其清理。

对于java中的系统类,虚拟机在启动的时候就对其进行初始化,减少了运行时初始化系统类的开销,提高了程序执行速度。

优选地,合约类的可修改字段为static字段。所述的页面置换算法具体为最近最久未使用算法。系统类、合约类和各个类的实例分别保存在三块不同的内存地址当中,彼此间不相重合。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1