JavaScript编程环境下释放3D渲染资源内存的多粒度方法技术

技术编号:38646985 阅读:8 留言:0更新日期:2023-09-02 22:38
本发明专利技术涉及一种JavaScript编程环境下释放3D渲染资源内存的多粒度方法,属于Web3D内存资源动态管理技术领域。通过内存容器来管理内存的批量释放;通过支持多个内存容器同时启用,来应对不同的释放需求,比如同时创建多个内存容器,对应静态场景级别、静态子场景级别、动态创建级别、动态临时对象级别等多个容器,在各自需要时进行释放,切换子场景时释放静态子场景级别的内存容器;切换大场景时,释放静态场景级别的内存容器。利用不同内存容器释放不同的资源内存,从而解决释放时机的问题,不会出现释放过早或过晚的问题。自动与手动释放能互相兼容,灵活搭配,在实际应用中有强大的灵活性,共同管理内存释放。共同管理内存释放。共同管理内存释放。

【技术实现步骤摘要】
JavaScript编程环境下释放3D渲染资源内存的多粒度方法


[0001]本专利技术涉及JavaScript语言下的一种Web3D资源释放技术,特别涉及内存资源多粒度管理技术,尤指海量资源复杂环境下的渲染资源内存释放方法与多粒度实施原则。可广泛应用于网页上的二维与三维图形应用,提升资源管理上的代码健壮性与工程可维护性,其多粒度特性非常适合覆盖大、中、小多种复杂程度项目使用,而且增强Web3D项目在差异巨大的不同软硬件平台上的适配能力。

技术介绍

[0002]随着Html5的广泛应用,网页上开始出现越来越多Web3D内容的渲染与呈现。而渲染Web3D内容时,都需要使用JavaScript调用3D API创建Web3D渲染资源。Web3D渲染资源与JavaScript编程环境下创建的普通数据不同,普通数据可以由系统管理自动释放,开发人员无需在意。而Web3D渲染资源在使用完毕后需要开发人员手动调用系统API函数来释放。而手动释放往往意味着风险,如果过早释放,会导致使用中的资源丢失造成画面出问题,如果释放晚了会导致内存使用效率下降,更严重的是遗忘释放,导致内存泄露。另外随着应用的功能扩张,代码越来越多,调用越来越复杂,JavaScript下对Web3D渲染资源的内存释放越来越难以控制,出现内存泄露的概率越来越高,整体运行也越来越难以维护。
[0003]另外JavaScript运行处理Web3D上的资源,而网页运行的设备非常广泛,所以需要非常强的适配能力,尤其是运行需要处理大量Web3D资源的情况。所以对释放内存的灵活性上提出了较强的需求,例如在手机这样的设备上,内存这样的系统资源很有限,而在桌面电脑上,内存的预算就会宽松很多,因而支持多粒度释放对JavaScript语言下的Web3D资源内存释放方法很需要。
[0004]在实现JavaScript语言下的Web3D资源内存释放方法上,由于JavaScript的语言特性,许多已有的内存管理与释放方法难以利用。例如JavaScript语言不同于C++等其他语言有析构函数这样明确的回收回调函数,不能明确掌握资源的使用情况,导致很多引用计数方法类型的内存释放方法就不能使用。其他可使用的内存释放算法也注重通用使用场景的需求,并不能很好的解决JavaScript语言下的Web3D资源释放需求。例如Objective

C下提供的AutoRelease Pool方法只能对当前Pool中的对象进行释放,不能进行不同释放粒度上的控制。

技术实现思路

[0005]本专利技术的目的在于提供一种JavaScript编程环境下释放Web3D渲染资源内存的多粒度方法,一方面通过提供内存容器,来一次性释放大量内存;另一方面通过提供资源句柄,单独手动控制某一个Web3D渲染资源的内存释放。两种手段互相补充,可以控制从粗粒度到单个资源的内存释放管理。本专利技术既能避免内存泄露,又能根据不同释放粒度需求,精准选择释放时机,避免过早释放或者过晚释放的问题。另外提供了从细粒度到粗粒度同时释放的支持,可以支持用户灵活选择释放内存的粒度与大小,让JavaScript语言运行在网
页上,跨多种设备运行需要适配广泛的硬件资源情况提供了有力支持。
[0006]本专利技术的上述目的通过以下技术方案实现:JavaScript编程环境下释放3D渲染资源内存的多粒度方法,包括以下步骤:步骤一、创建内存容器:基于资源制作情况与内存占用情况,将管理的资源划分成多个粒度;用户创建多个内存容器,对应管理不同的释放粒度;步骤二、创建资源分配管理器:资源分配管理器内部有当前内存容器栈,接受用户设置多个内存容器同时参与资源内存管理;步骤三、设置内存容器:用户根据需要管理的资源粒度,选择对应粒度的多个容器依据控制粒度从大到小的顺序依次设置给资源分配管理器,资源分配管理器将之放入当前内存容器栈;步骤四、创建海量资源:用户通过资源分配管理器创建多种海量Web3D渲染资源;步骤五、创建资源句柄:资源分配管理器为分配的内存生成资源句柄,并将资源句柄的引用通知给当前内存容器栈内的多个不同粒度的内存容器;步骤六、记录资源句柄:被通知的内存容器记录资源句柄的引用,之后资源分配管理器将资源句柄的引用返回给用户,用户可通过引用,让资源句柄对单个资源进行手动释放;步骤七、内存容器释放:用户根据Web3D资源释放粒度选择策略决定释放粒度大小,选择对应粒度的内存容器,对大量的资源句柄进行批量释放;步骤八、调整内存容器:随着海量Web3D渲染资源的加载卸载,清除之前多个旧内存容器,创建多个新内存容器,管理不同粒度的资源释放;步骤九、清理失效的资源句柄引用:随着不断进行Web3D资源释放操作,内存容器记录的资源句柄引用指向的资源句柄会有不少已经实际释放,无需继续记录引用,在系统性能压力较小时可进行清理操作;步骤十、继续运行:回到步骤三,设置不同粒度的内存容器给资源分配管理器,继续进Web3D资源的分配,资源分配管理内的当前内存容器栈内留存的内存容器继续存放通知保存的资源句柄,不断循环直到应用终止。
[0007]2、根据权利要求1所述的JavaScript编程环境下释放3D渲染资源内存的多粒度方法,其特征在于:资源句柄的使用包含如下步骤:步骤1.1、创建Web3D资源:资源分配管理器创建需要进行管理的Web3D资源;步骤1.2、创建资源句柄:资源分配管理器将创建后的Web3D资源转交给资源分配管理器,资源分配管理器通知当前内存容器栈进行管理;当前内存容器栈首先创建一个资源句柄,将需要管理的Web3D资源相关信息设置给资源句柄进行管理,包括资源类型、占用内存大小、资源引用;将创建出来的资源句柄的引用,通知栈内所有内存容器;每一个被通知的内存容器都会保留改资源句柄的引用;因JavaScript的语言特性,在多个内存容器下存放的多个资源句柄引用都指向同一个资源句柄;在资源分配管理器内部的创建、通知与保存完成后,资源句柄的引用也会返回给用户;步骤1.3、统计资源内存占用:资源句柄维护被管理Web3D资源的相关信息,其中资源内存占用统计会辅助本专利技术其他功能实现,例如构建Web3D资源释放粒度选择策略就需要根据现有资源的内存使用情况进行释放粒度的选取;
步骤1.4、支持多次释放资源:资源句柄的引用可被多个内存容器存放,并在多个内存容器释放时,资源句柄的释放操作会被多次调用;因此资源句柄的释放功能需要支持多次调用;在首次释放时,资源引用值为有效值;释放操作调用系统API对Web3D资源进行释放,完成释放后资源引用值置空;在此之后,依然可以调用资源句柄的释放功能,释放操作会检查资源引用是否是空值,发现该值已经被置空则直接跳过,不进行真实的释放操作;步骤1.5、对接对象池:资源句柄也可以扩展功能,与其他第三方的内存管理方法进行对接,例如在进行Web3D资源释放时,不调用系统API进行真实的释放操作,而是对接对象池方法,将Web3D资源放入对象池进行管理与复用,可以让用户进一步积极有效的控制内存释放。
[0008]3、根据权利要求1所述的JavaScr本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.JavaScript编程环境下释放3D渲染资源内存的多粒度方法,其特征在于:包括以下步骤:步骤一、创建内存容器:基于资源制作情况与内存占用情况,将管理的资源划分成多个粒度;用户创建多个内存容器,对应管理不同的释放粒度;步骤二、创建资源分配管理器:资源分配管理器内部有当前内存容器栈,接受用户设置多个内存容器同时参与资源内存管理;步骤三、设置内存容器:用户根据需要管理的资源粒度,选择对应粒度的多个容器依据控制粒度从大到小的顺序依次设置给资源分配管理器,资源分配管理器将之放入当前内存容器栈;步骤四、创建海量资源:用户通过资源分配管理器创建多种海量Web3D渲染资源;步骤五、创建资源句柄:资源分配管理器为分配的内存生成资源句柄,并将资源句柄的引用通知给当前内存容器栈内的多个不同粒度的内存容器;步骤六、记录资源句柄:被通知的内存容器记录资源句柄的引用,之后资源分配管理器将资源句柄的引用返回给用户,用户通过引用,让资源句柄对单个资源进行手动释放;步骤七、内存容器释放:用户根据Web3D资源释放粒度选择策略决定释放粒度大小,选择对应粒度的内存容器,对大量的资源句柄进行批量释放;步骤八、调整内存容器:随着海量Web3D渲染资源的加载卸载,清除之前多个旧内存容器,创建多个新内存容器,管理不同粒度的资源释放;步骤九、清理失效的资源句柄引用:随着不断进行Web3D资源释放操作,内存容器记录的资源句柄引用指向的资源句柄有已经实际释放,无需继续记录引用,在系统性能空闲时可进行清理操作;步骤十、继续运行:回到步骤三,设置不同粒度的内存容器给资源分配管理器,继续进Web3D资源的分配,资源分配管理内的当前内存容器栈内留存的内存容器继续存放通知保存的资源句柄,不断循环直到应用终止。2.根据权利要求1所述的JavaScript编程环境下释放3D渲染资源内存的多粒度方法,其特征在于:资源句柄的使用包含如下步骤:步骤1.1、创建Web3D资源:资源分配管理器创建需要进行管理的Web3D资源;步骤1.2、创建资源句柄:资源分配管理器将创建后的Web3D资源转交给资源分配管理器,资源分配管理器通知当前内存容器栈进行管理;当前内存容器栈首先创建一个资源句柄,将需要管理的Web3D资源相关信息设置给资源句柄进行管理,包括资源类型、占用内存大小、资源引用;将创建出来的资源句柄的引用,通知栈内所有内存容器;每一个被通知的内存容器都会保留改资源句柄的引用;因JavaScript的语言特性,在多个内存容器下存放的多个资源句柄引用都指向同一个资源句柄;在资源分配管理器内部的创建、通知与保存完成后,资源句柄的引用也会返回给用户;步骤1.3、统计资源内存占用:资源句柄维护被管理Web3D资源的相关信息;步骤1.4、支持多次释放资源:资源句柄的引用被多个内存容器存放,并在多个内存容器释放时,资源句柄的释放操作会被多次调用;因此资源句柄的释放功能需要支持多次调用;在首次释放时,资源引用值为有效值;释放操作调用系统API对Web3D资源进行释放,完成释放后资源引用值置空;在此之后,依然可以调用资源句柄的释放功能,释放操作会检查
资源引用是否是空值,发现该值已经被置空则直接跳过,不进行真实的释放操作;步骤1.5、对接对象池:资源句柄也可以扩展功能,与其他第三方的内存管理方法进行对接。3.根据权利要求1所述的JavaScript编程环境下释放3D渲染资源内存的多粒度方法,其特征在于:内存容器的使用包含如下步骤:步骤2.1、粒度划分:因为需要管理大量的Web3D资源,需要根据原则对Web3D资源进行粒度的划分;标准的选择从多方面来制定粒度划分;步骤2.2、创建容器:用户创建需要粒度的内存容器,并将容器通知给资源分配管理器进行管理;因步骤2.1下使用规则切分了多个粒度,所以也会创建对应的内存容器,各内存容器在需要启用的使用,设置给资源分配管理器;步骤2.3、记录资源句柄:资源分配管理器创建资源句柄后,会将资源句柄的引用通知给内存容器栈,栈内的所有内存容器都会收到通知,内存容器会将引用保存在容器内的队列中;步骤2.4、批量释放:随着创建的Web3D资源越来越多时,就需要进行释放操作;当一个内存容器收到释放调用时,会对保存容器内资源句柄引用的队列进行遍历,每个资源句柄都会调用释放操作,资源句柄支持多次释放操作,所以即使其他更细粒度的内存容器先调用了同一个资源的释放操作,也不会引发问题;步骤2.5、失效资源句柄清理:在多次管理Web3D资源并多次进行释放操作后,粗...

【专利技术属性】
技术研发人员:郑立国李敏朱林张乾贾金原黄剑锋安宁
申请(专利权)人:吉林吉动盘古网络科技股份有限公司
类型:发明
国别省市:

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

1