内存监控方法、装置、计算机可读存储介质和计算机设备与流程

文档序号:24872616发布日期:2021-04-30 12:45阅读:93来源:国知局
内存监控方法、装置、计算机可读存储介质和计算机设备与流程

本申请涉及计算机技术领域,特别是涉及一种内存监控方法、装置、计算机可读存储介质和计算机设备。



背景技术:

在javascript中,每当我们创建一个对象,都会占用内存,不再使用时,应用会自动释放内存。在实际情况下,由于程序的设计错误或者编码失误会造成内存无法及时释放,这些没有释放的内存无法再次使用,使得应用的内存使用过高,往往容易导致应用奔溃,为防止这种情况的发生,需要对移动终端的js类应用的内存进行远程监控和分析,以及时进行内存调优。

传统技术中,对js对象进行监控时,通常需要开发人员在需要监控的应用上安装debug证书,在调试阶段通过真机连接电脑,在电脑上打开调试面板,实现对移动终端的js类应用的内存进行监控,导致内存监控的效率低下。



技术实现要素:

基于此,有必要针对背景技术中引出的技术问题,提供一种内存监控方法、装置、计算机可读存储介质和计算机设备。

一种内存监控方法,包括:

获取预设消息;

注册至少一个与所述预设消息对应的回调监听对象;所述回调监听对象存在对应的回调接口;

向客户端发送所述预设消息,所述预设消息用于指示所述客户端获取当前监控对象的内存图信息,并调用所述回调监听对象对应的回调接口向所述回调监听对象返回所述内存图信息;

通过所述回调监听对象接收所述内存图信息。

一种内存监控装置,所述装置包括:

消息获取模块,用于获取预设消息;

注册模块,用于注册至少一个与所述预设消息对应的回调监听对象;所述回调监听对象存在对应的回调接口;

发送模块,用于向客户端发送所述预设消息,所述预设消息用于指示所述客户端获取当前监控对象的内存图信息,并调用所述回调监听对象对应的回调接口向所述回调监听对象返回所述内存图信息;

接收模块,用于通过所述回调监听对象接收所述内存图信息。

一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如下步骤:

获取预设消息;

注册至少一个与所述预设消息对应的回调监听对象;所述回调监听对象存在对应的回调接口;

向客户端发送所述预设消息,所述预设消息用于指示所述客户端获取当前监控对象的内存图信息,并调用所述回调监听对象对应的回调接口向所述回调监听对象返回所述内存图信息;

通过所述回调监听对象接收所述内存图信息。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如下步骤:

获取预设消息;

注册至少一个与所述预设消息对应的回调监听对象;所述回调监听对象存在对应的回调接口;

向客户端发送所述预设消息,所述预设消息用于指示所述客户端获取当前监控对象的内存图信息,并调用所述回调监听对象对应的回调接口向所述回调监听对象返回所述内存图信息;

通过所述回调监听对象接收所述内存图信息。

上述内存监控方法、装置、计算机可读存储介质和计算机设备,通过获取预设消息,注册至少一个与该预设消息对应的回调监听对象,每一个回调监听对象存在对应的回调接口,向客户端发送所述预设消息,通过该预设消息指示所述客户端获取当前监控对象的内存图信息,并调用所述回调监听对象对应的回调接口向所述回调监听对象返回所述内存图信息,最后通过所述回调监听对象接收所述内存图信息,由于不需要再通过调试面板连接电脑,移动终端直接通过发送预设消息就可以获取到内存图信息,方便快捷地实现对js类应用的内存监控,从而可以显著地提高内存监控效率。并且,由于不需要在调试阶段进行监控,可实现对线上用户进行js类应用的实时内存监控。

附图说明

图1为一个实施例中内存监控方法的应用环境图;

图2为一个实施例中内存监控方法的流程示意图;

图3为一个实施例中内存监控的数据流向图;

图4为另一个实施例中内存监控方法的流程示意图;

图5为一个实施例中步骤s406的流程示意图;

图6为另一个实施例中步骤s406的流程示意图;

图7为一个实施例中客户端处理消息的流程示意图;

图8为又一个实施例中内存监控方法的流程示意图;

图9为一个实施例中内存监控装置的结构框图;

图10为另一个实施例中内存监控装置的结构框图;

图11为一个实施例中计算机设备的结构框图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

图1为一个实施例中内存监控方法的应用环境图。参照图1,该内存监控方法应用于移动终端110。移动终端110具体可以是手机、平板电脑、笔记本电脑等中的至少一种。移动终端110上安装有至少一个js类应用对应的客户端。当移动终端110需要对js类应用进行内存监控时,可以首先获取预设消息,注册至少一个与该预设消息对应的回调监听对象,注册的每一个回调监听对象均存在对应的回调接口,移动终端110进一步向需要监控内存的js类应用的客户端发送该预设消息,客户端在接收到该预设消息后,会获取当前监控对象的内存图信息,然后分别调用各个回调监听对象的回调接口向回调监听对象返回获取到的内存图信息,移动终端通过回调监听对象可以接收到客户端发送的内存图信息,从而实现对js类应用的内存进行监控。

如图2所示,在一个实施例中,提供了一种内存监控方法。本实施例主要以该方法应用于上述图1中的移动终端110来举例说明。参照图2,该内存监控方法具体包括如下步骤:

s202,获取预设消息。

其中,预设消息指的是可以指示客户端执行约定的内存信息获取操作的消息。比如,预设消息具体可以是heap.snapshot消息,heap.snapshot消息是一个json字符串,可用于指示客户端获取内存快照,其结构如下:

{"id":-1,"method":"heap.snapshot","params":{}}

预设消息可以是开发人员预先构造的消息,当移动终端需要对js类应用的内存进行监控时,可以从本地获取到该预设消息。

s204,注册至少一个与预设消息对应的回调监听对象;回调监听对象存在对应的回调接口。

其中,预设消息对应的回调监听对象指的是用于对预设消息的处理结果进行回调监听的对象。回调监听对象对应的回调接口指的用于向回调监听对象返回消息处理结果的回调函数。移动终端可提前注册一个或者多个与预设消息对应的回调监听对象。每一个回调监听对象均存在对应的回调接口,通过各自对应的回调接口,回调监听对象可以在预设消息被处理完成后,获取到预设消息对应的处理结果。

s206,向客户端发送预设消息,预设消息用于指示客户端获取当前监控对象的内存图信息,并调用回调监听对象对应的回调接口向回调监听对象返回内存图信息。

其中,当前监控对象指的是当前监控的js类应用中所有活跃的js对象。内存图信息指的是用于反映js对象的内存使用情况的图信息。

具体地,移动终端可以通过进程间通信的方式将预设消息发送至客户端,客户端在接收到该预设消息后,根据该预设消息的指示,获取当前监控对象的内存图信息,然后遍历所有的回调监听对象,依次调用每一个回调监听对象对应的回调接口,通过调用回调接口向对应的回调监听对象返回消息处理结果,这里的消息处理结果也就是内存图信息。

在一个实施例中,移动终端向客户端发送预设消息是基于remotedebug远程调试协议实现的。remotedebug提供了一套标准接口,允许桌面版的浏览器连接到客户端应用,并进行js调试和分析。remotedebug本质是类似于定义了一套进程间通信机制,将消息以进程间通信的方式发送给客户端,客户端接收到消息后,可以执行消息约定的操作,例如触发断点或执行js代码注入或进行性能和耗时分析。如图3所示,移动终端在向客户端发送预设消息时,首先将该预设消息发送至远程调试代理层,触发远程调试代理层向客户端的发送该预设消息并提前注册回调监听对象,在消息处理完毕后,远程调试代理层通过回调监听的方式获取到消息处理结果,然后将消息处理结果返回至移动终端。可以理解的是,这里的消息处理结果指的是当前监控对象的内存图信息。

在一个实施例中,远程调试代理层向客户端的发送该预设消息时,首先将消息发送至inspectoragent层即监控代理层,在该监控代理层注册回调监听对象及消息处理对象,由监控代理层将消息发送至客户端对应的消息处理对象。比如向inspectoragent发送了heap.snapshot消息,则这个消息会由inspectoragent转发给对应的代理如inspectorheapagent去处理,inspectorheapagent里就会实际的处理这个消息,并执行该消息指定的操作,然后把消息处理结果返回。

s208,通过回调监听对象接收内存图信息。

具体地,移动终端通过注册的回调监听对象可以接收客户端返回的内存图信息,从而实现对客户端上的js类应用的内存监控。进一步地,移动终端在接收到内存图信息后,可以根据内存图信息计算出每个类和实例的内存大小,得到内存分配的信息并上报分析。

上述内存监控方法,移动终端通过获取预设消息,注册至少一个与该预设消息对应的回调监听对象,每一个回调监听对象存在对应的回调接口,向客户端发送预设消息,通过该预设消息指示客户端获取当前监控对象的内存图信息,并调用回调监听对象对应的回调接口向回调监听对象返回内存图信息,最后通过回调监听对象接收内存图信息,由于不需要再通过调试面板连接电脑,移动终端直接通过发送预设消息就可以获取到内存图信息,方便快捷地实现对js类应用的内存监控,从而可以显著地提高内存监控效率。并且,由于不需要在调试阶段进行监控,可实现对线上用户进行js类应用的实时内存监控。

在一个实施例中,如图4所示,提供了一种内存监控方法,本实施例中,内存监控方法是基于webkit的romotedebug协议实现的,这里的webkit指的是ios系统的浏览器引擎,在本实施例中,内存监控方法具体包括以下步骤:

s402,获取预设消息。

s404,获取当前执行环境中全局调试类对应的全局调试对象;全局调试类中包括第一接口及第二接口。

其中,当前执行环境指的是jscontext。全局调试类指的是webkit定义的jsglobalobjectdebuggable类。全局调试类对应的全局调试对象指的是jsglobalobjectdebuggable类对应的实例。

移动终端可通过间接调用webkit的jsc::vm::vmentryglobalobject接口获取当前jscontext对象的jsglobalobjectdebuggable实例。全局调试类中包括第一接口和第二接口。其中,第一接口用于注册回调监听对象。在一个实施例中,第一接口的结构如下:

voidconnect(inspector::frontendchannel&,boolisautomaticconnection=false,boolimmediatelypause=false)final;

第二接口用于触发消息的发送。在一个实施例中,第二接口的结构如下:

voiddisconnect(inspector::frontendchannel&)final。

可以理解的是,由于全局调试对象为全局调试类的实例,因此,全局调试对象同样包括第一接口和第二接口。

在一个实施例中,还包括第三接口,第三接口用于移除对应的回调监听对象。在一个实施例中,第三接口的结构如下:

voiddisconnect(inspector::frontendchannel&)final。

s406,调用第一接口,以注册至少一个与预设消息对应的回调监听对象;回调监听对象存在对应的回调接口。

具体地,移动终端通过调用第一接口,可以注册至少一个与预设消息对应的回调监听对象,回调监听对象为预设类的实例,该预设类中包括回调接口,在注册回调监听对象时,向第一接口中传入该预设类的实例。

在一个实施例中,预设类为前端通道类(frontendchannel),该类为虚基类,可预先构建一个自定义的子类,继承该虚基类,虚基类继承时,子类的首地址存储的是其虚函数表。虚继承的对象,其运行时对应的函数执行是通过动态查找其虚函数表来决定到底要执行哪个函数地址。本实施例中,第一接口接收的参数类型是继承自frontendchannel的子类对应的实例,也就是说,每一个注册的回调监听对象都是一个继承自frontendchannel的子类对应的实例。

s408,调用第二接口,以向客户端发送预设消息;预设消息用于指示客户端获取当前监控对象的内存图信息,并调用回调监听对象对应的回调接口向回调监听对象返回内存图信息。

具体地,移动终端调用第二接口,以触发预设消息的发送,预设消息发送至客户端后,客户端会获取当前监控对象的内存图信息,然后遍历所有回调监听对象,依次调用每一个回调监听对象对应的回调接口将内存图信息返回至对应的回调监听对象。

s410,通过回调监听对象接收内存图信息。

本实施例中,移动终端通过获取当前执行环境中全局调试类对应的全局调试对象,可以调用全局调试类中的第一接口注册回调监听对象,并调用全局调试类中的第二接口触发预设消息的发送,从而可以方便快捷地实现回调监听对象的注册和预设消息的发送。

在一个实施例中,如图5所示,s406调用第一接口,以注册至少一个与预设消息对应的回调监听对象,具体包括以下步骤:

s406a,获取第一接口对应的第一加载起始地址及第一段内偏移地址,根据第一加载起始地址及第一段内偏移地址得到第一接口对应的第一运行时地址。

s406b,根据第一接口对应的第一运行时地址调用第一接口,以注册至少一个与预设消息对应的回调监听对象。

其中,加载起始地址指的是动态库运行时加载起始地址;段内偏移地址指的是函数静态分析的段内偏移值。

由于jsglobalobjectdebuggable类及其对应的第一接口和第二接口都是私有的,未被公开,因此无法直接通过头文件引用对应接口来进行调用。本申请中,通过运行时的某些符号加载机制,并通过静态分析的方式来获取接口运行时地址以完成接口的调用。

移动终端的macho文件中存储了symbol函数符号,以及对应函数符号的地址,但是系统在某些情况下会把部分敏感符号在运行时给隐藏起来,导致运行时不能通过macho文件相关api(applicationprogramminginterface,应用程序编程接口)查询符号和函数地址的映射关系,但在静态分析时,可以直接借助machoview,hopperdissambler等第三方反汇编分析工具根据函数符号获取到其函数地址在macho文件内的段内偏移值。当运行时,将该段内偏移值加上其对应动态库的加载起始地址,即可得到某个函数的实际运行时地址,然后直接通过函数指针调用并传参的方式,实现接口的间接调用。

具体到本实施例中,可以首先借助machoview,hopperdissambler等第三方反汇编分析工具根据第一接口的函数符号得到其函数地址在macho文件内的段内偏移值,运行时,移动终端获取该段内偏移值以及第一接口对应动态库的加载起始地址,将二者相加即得到第一接口对应的第一运行时地址。例如获取到jsglobalobjectdebuggable::connect函数在ios12.2上的偏移地址为0x9cbee0,则运行时通过dyld相关api获取javascriptcore.framework的起始地址,将二者相加即得到connect函数的运行时地址。

接着按照c++函数调用和第一接口的参数声明,进行传参即可完成实际的第一接口调用逻辑,以注册至少一个与预设消息对应的回调监听对象。

本实施例中,通过获取第一接口对应的第一加载起始地址及第一段内偏移地址,根据第一加载起始地址及第一段内偏移地址得到第一接口对应的第一运行时地址,可以在运行时实现对第一接口的动态调用。

在一个实施例中,s408调用第二接口,以向客户端发送预设消息,包括:获取第二接口对应的第二加载起始地址及第二段内偏移地址,根据第二加载起始地址及第二段内偏移地址得到第二接口对应的第二运行时地址;根据第二接口对应的第二运行时地址调用第二接口,以向客户端发送预设消息。

具体地,可以首先借助machoview,hopperdissambler等第三方反汇编分析工具根据第二接口的函数符号得到其函数地址在macho文件内的段内偏移值,运行时,移动终端获取该段内偏移值以及第二接口对应动态库的加载起始地址,将二者相加即得到第二接口对应的第二运行时地址。接着按照c++函数调用和第二接口的参数声明,进行传参即可完成实际的第二接口调用逻辑,以触发预设消息的发送。

本实施例中,通过获取第二接口对应的第二加载起始地址及第二段内偏移地址,根据第二加载起始地址及第二段内偏移地址得到第二接口对应的第二运行时地址,可以在运行时实现对第二接口的动态调用。

在一个实施例中,如图6所示,s406中,调用第一接口,以注册至少一个与预设消息对应的回调监听对象,包括:

s602,获取至少一个预设前端通道子类对应的实例;预设前端通道子类为前端通道类的子类;前端通道类为虚基类。

s604,将至少一个预设前端通道子类对应的实例分别作为第一接口的接口参数调用第一接口,以注册至少一个与预设消息对应的回调监听对象。

其中,前端通道类指的是webkit定义的frontendchannel类,frontendchannel类为虚基类,其结构如下:

预设前端通道子类指的是预先构建的继承自frontendchannel类的子类,该预设前端通道子类中重写并实现了frontendchannel类中的sendmessagetofrontend接口。

本实施例中,移动终端可以获取至少一个预设前端通道子类对应的实例,在注册回调监听对象时,将获取到的实例分别作为第一接口的接口参数,以调用第一接口,注册得到inspector::frontendchannel对象。由于回调监听对象是预设前端通道子类对应的实例,预设前端通道子类中重写了sendmessagetofrontend接口,该sendmessagetofrontend接口即为回调监听对象对应的回调接口。由于预设前端通道子类继承自虚基类frontendchannel类,因此,该预设前端通道子类也为虚基类,该预设前端通道子类对应的sendmessagetofrontend接口函数为虚函数,该预设前端通道子类的首地址存储的是其虚函数表,虚函数表中保存了虚函数对应的函数地址。该预设前端通道子类的对象,其运行时对应的函数执行是通过动态查找其虚函数表来决定到底要执行哪个函数地址。

本实施例中,移动终端通过获取至少一个预设前端通道子类对应的实例,将获取到的实例分别作为第一接口的接口参数调用第一接口,以注册至少一个与预设消息对应的回调监听对象,由于预设前端通道子类为前端通道类的子类,前端通道类为虚基类,基于虚函数的动态性,可实现在js应用内动态获取到当前js对象的内存图信息。

在一个实施例中,如图7所示,预设消息中包括消息标识和消息名称;预设消息还用于指示客户端执行以下步骤s702-s704,客户端通过执行这些步骤对预设消息进行处理:

s702,根据消息标识和消息名称确定对应的第一消息处理器,通过第一消息处理器执行预设消息对应的内存获取操作,得到当前监控对象对应的字符串数据。

具体地,消息标识用于唯一标识一条消息。第一消息处理器具体可以是webkit定义的backenddispatcherhandler。开发人员在构建预设消息时,可建立消息与第一消息处理器之间的对应关系。由于不同的消息对应不同的第一消息处理器,因此,移动终端可根据预设消息中携带的消息标识和消息名称确定对应的第一消息处理器,通过webkit定义的消息分发器dispatcher将预设消息发送给对应的第一消息处理器,通过第一消息处理器执行预设消息对应的内存获取操作,得到string数据,即字符串数据。

s704,将字符串数据发送至对应的第二消息处理器,通过第二消息处理器将字符串数据转换为json格式数据,以得到当前监控对象的内存图信息。

具体地,第二消息处理器可以是webkit定义的m_backenddispatcher,第二消息处理器指的是该类消息对应的具体的消息处理者。移动终端通过调用sendresponse接口将得到的string数据发送给其m_backenddispatcher,m_backenddispatcher将接收到的数据转换为json格式数据,以得到当前监控对象的内存图信息。

进一步,移动终端将json格式数据发给webkit定义的前台路由器m_frontendrouter,m_frontendrouter收到数据后会遍历所有注册的回调监听对象,并分别调用每一个回调监听者对应的回调接口,将json格式数据分别返回至每一个回调监听对象,移动终端通过回调监听对象即可以接收到json格式内存图信息,从而实现对js类应用的内存监控。

如图8所示,为一个具体的实施例中,内存监控方法的流程示意图,在该实施例中,内存监控方法具体包括以下步骤:

s802,获取预设消息,预设消息中携带消息标识及消息名称。

s804,获取当前jscontext对象的jsglobalobjectdebuggable实例。

s806,获取jsglobalobjectdebuggable实例对应的connect接口、dispatchmessagefromremote接口的加载起始地址和段内偏移值,分别根据二者的加载起始地址和段内偏移值分别得到connect接口、dispatchmessagefromremote接口的运行时地址。

s808,根据connect接口的运行时地址调用connect接口,在调用cennect接口时,传入预先构建的继承自虚基类frontendchannel的子类对应的实例,以注册inspector::frontendchannel对象。

s810,调用dispatchmessagefromremote接口来将预设消息通过进程间通信的方式转发给客户端对应的dispatcher。

s812,客户端对应的dispatcher根据消息标识和消息名称找到对应的backenddispatcherhandler。

s814,客户端对应的backenddispatcherhandler则会进行该消息的处理,处理完毕后,会将处理的结果string数据发送给其m_backenddispatcher,并调用sendresponse接口发送过去。

s816,客户端对应的m_backenddispatcher将收到的string数据转为json格式的内存图信息发给m_frontendrouter。

s818,客户端对应的m_frontendrouter收到数据后会遍历所有已经注册的回调监听对象,获取回调监听对象对应的回调接口,从虚函数表中查找回调接口对应的函数地址,根据该函数地址向回调监听对象返回内存图信息。

s820,通过回调监听对象接收内存图信息。

本实施例中,通过动态调用connect接口、dispatchmessagefromremote接口提前注册回调监听对象并触发预设消息的发送,同时回调监听对象的回调接口为虚函数,可在运行时动态查找虚函数表以执行函数地址,动态获取消息处理结果,从而可以动态地获取js类应用中的内存图信息,实现对js类应用的内存图信息的实时监控。并且,由于不需要再通过调试面板连接电脑,移动终端直接通过发送预设消息就可以获取到内存图信息,方便快捷地实现对js类应用的内存监控,从而可以显著地提高内存监控效率。

应该理解的是,虽然图2-图8的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-图8中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图9所示,提供了一种内存监控装置900,参照图9,该装置包括:

消息获取模块902,用于获取预设消息;

注册模块904,用于注册至少一个与预设消息对应的回调监听对象;回调监听对象存在对应的回调接口;

发送模块906,用于向客户端发送预设消息,预设消息用于指示客户端获取当前监控对象的内存图信息,并调用回调监听对象对应的回调接口向回调监听对象返回内存图信息;

接收模块908,用于通过回调监听对象接收内存图信息。

在一个实施例中,如图10所示,该装置还包括:对象获取模块910,用于获取当前执行环境中全局调试类对应的全局调试对象;全局调试类中包括第一接口及第二接口;注册模块还用于调用第一接口,以注册至少一个与预设消息对应的回调监听对象;发送模块还用于调用第二接口,以向客户端发送预设消息。

在一个实施例中,注册模块还用于获取第一接口对应的第一加载起始地址及第一段内偏移地址,根据第一加载起始地址及第一段内偏移地址得到第一接口对应的第一运行时地址;根据第一接口对应的第一运行时地址调用第一接口,以注册至少一个与预设消息对应的回调监听对象。

在一个实施例中,发送模块还用于获取第二接口对应的第二加载起始地址及第二段内偏移地址,根据第二加载起始地址及第二段内偏移地址得到第二接口对应的第二运行时地址;根据第二接口对应的第二运行时地址调用第二接口,以向客户端发送预设消息。

在一个实施例中,注册模块还用于获取至少一个预设前端通道子类对应的实例;预设前端通道子类为前端通道类的子类;前端通道类为虚基类;将至少一个预设前端通道子类对应的实例分别作为第一接口的接口参数调用第一接口,以注册至少一个与预设消息对应的回调监听对象。

在一个实施例中,预设消息中携带消息标识和消息名称;预设消息还用于指示客户端执行以下步骤:根据消息标识和消息名称确定对应的第一消息处理器,通过第一消息处理器执行预设消息对应的内存获取操作,得到当前监控对象对应的字符串数据;将字符串数据发送至对应的第二消息处理器,通过第二消息处理器将字符串数据转换为json格式数据,以得到当前监控对象的内存图信息。

上述内存监控装置,通过获取预设消息,注册至少一个与该预设消息对应的回调监听对象,每一个回调监听对象存在对应的回调接口,向客户端发送预设消息,通过该预设消息指示客户端获取当前监控对象的内存图信息,并调用回调监听对象对应的回调接口向回调监听对象返回内存图信息,最后通过回调监听对象接收内存图信息,由于不需要再通过调试面板连接电脑,移动终端直接通过发送预设消息就可以获取到内存图信息,方便快捷地实现对js类应用的内存监控,从而可以显著地提高内存监控效率。并且,由于不需要在调试阶段进行监控,可实现对线上用户进行js类应用的实时内存监控。

图11示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的移动终端110。如图11所示,该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置、显示屏、摄像头、声音采集装置和扬声器。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现内存监控方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行内存监控方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,本申请提供的内存监控装置可以实现为一种计算机程序的形式,计算机程序可在如图11所示的计算机设备上运行。计算机设备的存储器中可存储组成该内存监控装置的各个程序模块,比如,图9所示的消息获取模块、注册模块、发送模块和接收模块。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的内存监控方法中的步骤。

例如,图11所示的计算机设备可以通过如图9所示的内存监控装置中的消息获取模块执行步骤s202。计算机设备可通过注册模块执行步骤s204。计算机设备可通过发送模块执行s206。计算机设备可通过接收模块执行步骤s208。

在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述内存监控方法的步骤。此处内存监控方法的步骤可以是上述各个实施例的内存监控方法中的步骤。

在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述内存监控方法的步骤。此处内存监控方法的步骤可以是上述各个实施例的内存监控方法中的步骤。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指示相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

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