系统内存控制方法及其系统的制作方法

文档序号:9810341阅读:343来源:国知局
系统内存控制方法及其系统的制作方法
【技术领域】
[0001]本发明涉及内存控制领域,特别是一种系统内存控制方法及其系统。
【背景技术】
[0002]Android系统的APP(Applicat1n,应用程序)开发中,内存性能检测被广泛应用。例如,在APP过程中,软件工程师写完部分开发代码,然后对该部分开发代码进行调试,检测该部分开发代码的内存占用情况,能够及时了解开发代码对内存的影响。
[0003]目前,内存性能检测有两种方式,一种是利用IDE插件对内存性能进行检测,另一种是利用专门针对内存性能检测的APP进行实时监控。对内存性能进行检测的IDE插件有android stud1的Memory monitor,进行内存性能实时监控的APP应用有GT监控软件。它们原理都是利用adb命令“shelI dumpsys meminfo”在后台获取进行内存检测的APP的内存信息,并截取PSS(Pr0p0rti0nal Set Size,实际使用的物理内存)值,该值为APP当前运行的内存占用值。
[0004]但是,上述两种内存性能检测方式中截取的PSS值,其中包括了可以被回收但是尚未释放的部分内存。因为java对象内存,一旦没有其他引用指向它,那么这个对象的内存块即被判为可以回收的内存块,但是可以回收的java内存不会马上释放,必须等到内存占用到一定的程度,才会触发GC(Garbage Collect1n,垃圾回收),回收没有被引用的内存块。因此,系统的内存性能分析不够理想。

【发明内容】

[0005]针对上述现有技术中存在的系统的内存性能分析不够理想的问题,本发明的目的在于提供一种系统内存控制方法及其系统,能够提高系统内存性能分析的准确度。
[0006]—种系统内存控制方法,包括:
[0007]检测到页面切换事件,触发执行系统垃圾回收;
[0008]监控所述系统垃圾回收对应的日志记录,根据所述日志记录判断本次的系统垃圾回收是否执行完毕;
[0009]若执行完毕,获取系统当前的内存占用信息,根据该内存占用信息分析系统当前的内存性能。
[0010]一种系统内存控制系统,包括:
[0011]检测模块,用于检测到页面切换事件,触发执行系统垃圾回收;
[0012]监控模块,用于监控所述系统垃圾回收对应的日志记录;
[0013]判断模块,用于根据所述日志记录判断本次的系统垃圾回收是否执行完毕;
[0014]分析模块,用于若执行完毕,获取系统当前的内存占用信息,根据该内存占用信息分析系统当前的内存性能。
[0015]本实施例中,通过检测到系统的页面切换事件,触发系统垃圾回收,再监控所述系统垃圾回收对应的日志记录,根据所述日志记录判断本次的系统垃圾回收是否执行完毕,若执行完毕,获取系统当前的内存占用信息,由于此时实际使用的物理内存值不包含无引用对象的内存值,所以由此分析系统当前的内存性能,准确度更高。
【附图说明】
[0016]图1为一个实施例的系统内存控制方法的流程示意图;
[0017]图2为一个实施例的系统内存控制系统的结构示意图。
【具体实施方式】
[0018]为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
[0019]请参阅图1中一个实施例的系统内存控制方法的流程示意图。
[0020]一种系统内存控制方法,包括:
[0021]S102,检测到页面切换事件,触发执行系统垃圾回收。
[0022]在程序运行过程中,每创建一个对象都会被分配一定的内存用以存储对象数据。如果只是不停的分配内存,那么程序迟早面临内存不足的问题。所以在任何语言中,都会有一个内存回收机制来释放过期对象的内存,以保证内存能够被重复利用其中。
[0023]所述系统垃圾回收用于在空闲时间以不定时的方式回收无任何引用的对象占据的内存空间。
[0024]本步骤通过检测到系统页面切换事件来触发执行系统垃圾回收,释放系统中无任何引用的对象所占据的内存空间,从而提供系统内存的利用率。
[°°25] 具体的,例如在android系统中,当检测到android系统的Activity页面发生切换时,触发执行android系统中的GC(Garbage ColIect1n,垃圾回收)事件。所述GC事件用于在andro i d系统的空闲时间以不定时的方式回收无任何引用的对象占据的内存空间。
[0026]在其中一个实施例中,所述检测到页面切换事件之前,包括:
[0027]获取系统的后台监控线程,通过所述后台监控线程监控系统的页面,并记录监控页面;
[0028]所述检测到页面切换事件,具体包括:
[0029]比对当前的监控页面与前一次记录的监控页面是否一致,若否,则检测到页面切换事件。
[0030]具体地,可以通过获取指令或者运行软件开发包等方式开启系统的后台监控线程,所述后台监控线程用于监控系统的页面,并记录监控页面;通过比对当前的监控页面与前一次记录的监控页面是否一致,若否,则判定检测到页面切换事件,因此,可以快速检测到系统的页面切换事件,进行下一步的触发执行系统垃圾回收。
[0031]应用于android系统中,可以通过在程序开发代码中集成后台监控线程的jar(Java Archive,Java归档文件)包,获取所述后台监控线程,后台监控线程通过获取RunningTaskInf ο (当前运行的任务信息)的topActi vity (活跃Activity)来记录当前监控的Activity页面,与上次记录的监控Activity页面比对,若不一致,贝Ij判断Activity页面发生了切换,因此,可以快速检测到android系统的Activity页面切换,进行下一步的触发执行系统垃圾回收函数System.gc()来回收无任何引用的java对象占据的内存空间。
[0032]在其中一个实施例中,所述比对当前的监控页面与前一次记录的监控页面是否一致,若否,则检测到页面切换事件,包括:
[0033]比对当前监控页面的名称与前一次记录的监控页面的名称是否一致,若否,则检测到页面切换事件。
[0034]通过比对前后监控页面的名称是否一致来进行判断,若否,则检测到页面切换事件,从而一方面占用较少的系统资源,提高系统运行的效率,另一方面进一步提高检测到页面切换事件的效率。
[0035]类似地,所述比对当前的监控页面与前一次记录的监控页面是否一致,若否,则检测到页面切换事件,包括:
[0036]比对当前监控页面的最近更新时间与前一次记录的监控页面的最近更新时间是否一致,若否,则检测到页面切换事件。
[0037]通过比对前后监控页面的最近更新时间是否一致来进行判断,若否,则检测到页面切换事件,从而一方面占用较少的系统资源,提高系统运行的效率,另一方面进一步提高检测到页面切换事件的效率。
[0038]S104,监控所述系统垃圾回收对应的日志记录,根据所述日志记录判断本次的系统垃圾回收是否执行完毕。其中,所述后台监控线程还用于监控所述系统垃圾回收对应的日志记录。
[0039]本步骤具体地,通过日志获取指令获取系统垃圾回收对应的日志文件,所述后台监控线程监控所述日志文件的日志记录,当检测到所述系统垃圾回收执行完毕的对应日志记录时,则判定系统垃圾回收执行完毕,因此,为后续获取系统当前的内存占用信息提供时机,使得获取的所述内存占用信息更加准确。
[0040]应用于android系统中,通过android系统的adb shell 1gcat(日志获取)指令获取android系统中GC事件对应的GC日志,后台监控线程监控所述GC日志,若检测到所述GC事件执行完毕的对应日志记录,则判定GC事件执行完毕,从而进行后续的获取android系统当前的内存占用信息,使得获取的所述内存占用信息更加准确。
[0041]S106,若执行完毕,获取系统当前的内存占用信息,根据该内存占用信息分析系统当前的内存性能。
[0042]系统垃圾回收执行完毕,亦即无引用对象的内存资源释放完毕,此时,获取系统当前的内存占用信息,由所述内存占用信息得到系统当前实际使用的物理内存值,由于此时实际使用的物理内存值不包含无引用对象的内存值,所以由此分析系统当前的内存性能,准确度更高。
[0043]在其中一个实施例中,所述根据该内存占用信息分析系统当前的内存性能,包括:根据所述内存占用信息获取系统当前运行的预设应用的实际使用物理内存值;若所述实际使用物理内存值大于预设阀值,则发出告警。
[0044]具体地,应用于android系统中,当GC执行完毕时,通过android系统的adb shelldumpsys meminfo(系统当前内存信息)指令,获取android系统中当前运行的预设APP(Appli cat 1n,应用程序)的PSS (Proport1nal Set Size,实际使用的物理内存)值,此时的PSS值不包含无引用java对象的内存值,因此更加准确地反映出APP当前的内存占用情况,据此,若所述实际使用物理内存值大于预设阀值,发出更加精准的告警。
[0045]本实施例中,通过检测到系统的页面切换事件,触发系统垃圾回收,再监控所述系统垃圾回收对应的日志记录,根据所述日志记录判断本次的系统垃圾回收是否执行完毕,若执行完毕,获取系统当前的内存占用信息,由于此时实际使用的物理内存值不包含无引用对象的内存值,所以
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1