内存泄露的处理方法、装置、电子设备及计算机存储介质制造方法及图纸

技术编号:31561556 阅读:19 留言:0更新日期:2021-12-25 10:42
本公开提供了一种内存泄露的处理方法、装置、电子设备及计算机可读存储介质,涉及计算机领域。该方法包括:当检测到内存泄露时,从应用程序运行时占用的内存空间中获取已生成的至少一个标记信息;其中,各个标记信息各自具有对应的线程资源;然后基于各个标记信息确定出所述应用程序运行时占用各个线程资源的泄露位置。通过内存空间中的标记信息确定出应用程序运行时没有被释放的线程资源,从而确定出应用程序中的各个泄露位置,这样,开发人员就可以对各个代码段进行修改,从而对应用程序进行更新,使得更新后的应用程序在运行过程中退出线程时,也会释放线程占用的线程资源,从而解决内存泄露的问题,提升了应用程序运行的稳定性。定性。定性。

【技术实现步骤摘要】
内存泄露的处理方法、装置、电子设备及计算机存储介质


[0001]本公开涉及计算机
,具体而言,本公开涉及一种内存泄露的处理方法、装置、电子设备及计算机可读存储介质。

技术介绍

[0002]在开发应用程序时,比较常用的创建线程的方式是通过指定的函数创建线程来执行指定的行为动作。
[0003]指定的函数在创建线程时,默认创建出来的线程是连接状态的,如果不进行其他的设置,在线程执行完成行为动作之后,退出时线程就不能够释放线程占用的线程资源。
[0004]如果要在线程完成退出时释放资源,就需要通过其它线程对创建出来的线程调用pthread_jion,或者创建出来的新线程在退出之前给自己设置为分离状态,或者在线程创建时就指定线程的状态是分离状态。然而软件开发人员在开发的过程中,有可能忘记进行上述的设置,从而使得创建出来的线程在退出后没有释放线程资源。随着程序长时间的运行,会使得这些没有被释放的线程资源越来越多,导致内存泄露,最终在应用程序运行正常功能时分配不出内存而崩溃。
[0005]对于这种内存泄露,软件开发人员只能通过排查代码来发现问题所在和解决问题。在软件复杂度日益庞大的如今,大型的软件可能是几十人甚至上百人共同开发出来的,组成软件的模块很多,开发人员的业务能力也有高有底,同时去排查这种问题,显然是费时费力,很难排查到导致线程资源泄露的问题点去解决问题。

技术实现思路

[0006]本公开提供了一种内存泄露的处理方法、装置、电子设备及计算机可读存储介质,可以解决内存泄露排查困难的问题。所述技术方案如下:
[0007]第一方面,提供了一种内存泄露的处理方法,该方法包括:
[0008]当检测到内存泄露时,从应用程序运行时占用的内存空间中获取已生成的至少一个标记信息;其中,各个标记信息各自具有对应的线程资源;
[0009]基于各个标记信息确定出所述应用程序运行时占用各个线程资源的泄露位置。
[0010]第二方面,提供了一种内存泄露的处理装置,该装置包括:
[0011]第一检测模块,用于检测内存泄露;
[0012]第一获取模块,用于从应用程序运行时占用的内存空间中获取已生成的至少一个标记信息;其中,各个标记信息各自具有对应的线程资源;
[0013]确定模块,用于基于各个标记信息确定出所述应用程序运行时占用各个线程资源的泄露位置。
[0014]第三方面,提供了一种电子设备,该电子设备包括:
[0015]处理器、存储器和总线;
[0016]所述总线,用于连接所述处理器和所述存储器;
[0017]所述存储器,用于存储操作指令;
[0018]所述处理器,用于通过调用所述操作指令,可执行指令使处理器执行如本公开的第一方面所示的内存泄露的处理方法对应的操作。
[0019]第四方面,提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现本公开第一方面所示的内存泄露的处理方法。
[0020]本公开提供的技术方案带来的有益效果是:
[0021]当检测到内存泄露时,从应用程序运行时占用的内存空间中获取已生成的至少一个标记信息;其中,各个标记信息各自具有对应的线程资源;然后基于各个标记信息确定出所述应用程序运行时占用各个线程资源的泄露位置。通过内存空间中的标记信息确定出应用程序运行时没有被释放的线程资源,从而确定出应用程序中的各个泄露位置,这样,开发人员就可以对各个代码段进行修改,从而对应用程序进行更新,使得更新后的应用程序在运行过程中退出线程时,也会释放线程占用的线程资源,从而解决内存泄露的问题,提升了应用程序运行的稳定性。
附图说明
[0022]为了更清楚地说明本公开实施例中的技术方案,下面将对本公开实施例描述中所需要使用的附图作简单地介绍。
[0023]图1为本公开一个实施例提供的一种内存泄露的处理方法的流程示意图;
[0024]图2为本公开又一实施例提供的一种内存泄露的处理装置的结构示意图;
[0025]图3为本公开又一实施例提供的一种内存泄露的处理的电子设备的结构示意图。
具体实施方式
[0026]下面详细描述本公开的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本公开,而不能解释为对本公开的限制。
[0027]本
技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本公开的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
[0028]为使本公开的目的、技术方案和优点更加清楚,下面将结合附图对本公开实施方式作进一步地详细描述。
[0029]本公开提供的内存泄露的处理方法、装置、电子设备和计算机可读存储介质,旨在解决现有技术的如上技术问题。
[0030]下面以具体地实施例对本公开的技术方案以及本公开的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本公开的实施例进行描述。
[0031]在一个实施例中提供了一种内存泄露的处理方法,如图1所示,该方法包括:
[0032]步骤S101,当检测到内存泄露时,从应用程序运行时占用的内存空间中获取已生成的至少一个标记信息;其中,各个标记信息各自具有对应的线程资源;
[0033]在实际应用中,在应用程序的运行过程中,如果出现内存泄露,那么会出现内存占用率一直增长的情况,导致最终分配不出内存而使得应用程序崩溃。所以,在本公开实施例中,可以在应用程序崩溃的时候判定为内存泄露;也可以在应用程序运行的过程中检测该应用程序的内存占用率,当内存占用率超过占用率阈值的时候判定为内存泄露,或者也可以采用其它方式来检测内存泄露,在实际应用中可以根据实际需求进行设置,本公开实施例对此不作限制。
[0034]进一步,当检测到内存泄露时,可以从内存空间中获取至少一个标记信息,每个标记信息都是应用程序在运行时,该应用程序的线程占用内存空间中的线程资源时标记的。这样,通过标记信息即可确定出占用线程资源的线程了。
[0035]步骤S102,基于各个标记信息确定出应用程序运行时占用各个线程资源的泄露位置。
[0036]获取到各个标记信息之后,即可通过标记信息确定出占用线程资源的线程,本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种内存泄露的处理方法,其特征在于,包括:当检测到内存泄露时,从应用程序运行时占用的内存空间中获取已生成的至少一个标记信息;其中,各个标记信息各自具有对应的线程资源;基于各个标记信息确定出所述应用程序运行时占用各个线程资源的泄露位置。2.根据权利要求1所述的内存泄露的处理方法,其特征在于,所述标记信息通过如下方式生成:当所述应用程序启动时,创建对应的线程;获取所述线程对应的原始线程退出函数;采用预设的目标线程退出函数替换所述原始线程退出函数;当所述目标线程退出函数被调用时,获取所述应用程序的线程在所述内存空间中占用的线程资源,并采用所述目标线程退出函数对所述线程资源进行标记,生成标记信息。3.根据权利要求2所述的内存泄露的处理方法,其特征在于,所述获取所述线程对应的原始线程退出函数,包括:调用所述应用程序的动态链接库;从所述动态链接库中搜索得到所述线程的原始线程退出函数。4.根据权利要求2所述的内存泄露的处理方法,其特征在于,还包括:调用所述原始线程退出函数,并执行所述原始线程退出函数来退出所述线程;当所述线程退出完成后,检测所述线程在所述内存空间中占用的线程资源是否被释放;若否,则将所述线程资源对应的标记信息保存在所述内存空间中;若是,则丢弃所述线程资源对应的标记信息。5.根据权利要求1至4任一所述的内存泄露的处理方法,其特征在于,所述基于各个标记信息确定出所述应用程序运行时占用各个线程资源的泄露位置,包括:基于各个标记信息确定出所述应用程序运行时占用各个线程资源的各个线程;从所述应用程序的源代码中确定出创建各个...

【专利技术属性】
技术研发人员:韩立
申请(专利权)人:北京字节跳动网络技术有限公司
类型:发明
国别省市:

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

1