CN108073452A - 一种动态语言的运行时环境处理方法、装置和设备 - Google Patents
一种动态语言的运行时环境处理方法、装置和设备 Download PDFInfo
- Publication number
- CN108073452A CN108073452A CN201610989665.9A CN201610989665A CN108073452A CN 108073452 A CN108073452 A CN 108073452A CN 201610989665 A CN201610989665 A CN 201610989665A CN 108073452 A CN108073452 A CN 108073452A
- Authority
- CN
- China
- Prior art keywords
- subprocess
- memory headroom
- memory
- dynamic language
- parent process
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44578—Preparing or optimising for loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种动态语言的运行时环境处理方法、装置和设备,其中方法包括:父进程启动,第一内存空间被分配以加载动态语言的运行时环境;所述父进程创建子进程,第二内存空间被分配给所述子进程以运行采用动态语言的应用;其中若子进程存在多个,则多个第二内存空间分别被分配给各子进程。这种共享运行时环境的方式,相比较现有技术中针对各应用分别独立加载运行时环境的方式,降低了对内存的占用。
Description
【技术领域】
本发明涉及计算机应用技术领域,特别涉及一种动态语言的运行时环境处理方法、装置和设备。
【背景技术】
动态语言是计算机编程语言中的一个语言类别,是一类在运行时可以动态地改变类型、结构的语言,在运行时函数和属性可以被增加、修改和删除。例如JavaScript、Python、Ruby等都属于动态语言。动态语言不需要编译即可运行,在运行时必然需要运行环境的支撑,这个环境叫做运行时环境,它包含动态语言运行所需要的所有要素,例如Java虚拟机、JavaScript引擎等。
随着计算机编程语言的迅速发展,动态语言以其编写友好、易调试、易部署等优点,得到了越来越广泛的应用。不仅在Web前端、Web后端开发中使用广泛,且在客户端设备(例如智能手机、智能电视)软件中也开始得以应用。然而,现有技术中,当每个采用动态语言的应用进程启动后,都会分别被分配一个内存空间以分别用于加载各应用进程的运行时环境,由于动态语言的运行时环境需要占用较大的内存,而客户端设备往往内存有限,尤其在一些较为低端的设备中,很容易导致内存不足。这就需要对动态语言的运行时环境加以改造,降低其运行时对内存的占用。
【发明内容】
有鉴于此,本发明提供了一种动态语言的运行时环境处理方法、装置和设备,以便于降低动态语言的运行时环境对内存的占用。
具体技术方案如下:
本发明提供了一种动态语言的运行时环境处理方法,该方法包括:
父进程启动,第一内存空间被分配以加载动态语言的运行时环境;
所述父进程创建子进程,第二内存空间被分配给所述子进程以运行采用动态语言的应用;
其中若子进程存在多个,则多个第二内存空间分别被分配给各子进程。
根据本发明一优选实施方式,所述父进程启动包括:
在操作系统启动完成后,所述父进程启动;或者,
在操作系统启动过程中,所述父进程启动。
根据本发明一优选实施方式,所述第一内存空间和第二内存空间分别对应不同的堆;或者,
所述第一内存空间和第二内存空间分别对应同一个堆中的不同区块。
根据本发明一优选实施方式,所述第一内存空间是由所述父进程在启动后,向操作系统申请后被分配的;
所述第二内存空间是子进程被创建后,由子进程向操作系统申请后被分配的。
根据本发明一优选实施方式,该方法还包括:
若所述第一内存空间不足,则所述父进程向所述操作系统申请对所述第一内存空间扩容;或者,
若第二内存空间不足,则对应子进程向所述操作系统申请对第二内存空间扩容。
根据本发明一优选实施方式,在第一内存空间加载的动态语言的运行时环境包括:执行引擎;
所述第二内存空间被分配给所述子进程以运行采用动态语言的应用包括:由所述执行引擎在第二内存空间执行对应子进程的动态语言代码。
根据本发明一优选实施方式,所述第一内存空间包括:新生区new space、老生指针区old pointer space、老生数据区old data space、大对象区large objectspace和代码区code space;
所述第二内存空间包括:新生区new space、老生指针区oldpointer space和老生数据区old data space。
根据本发明一优选实施方式,所述父进程创建子进程包括:
若所述父进程获取到所述采用动态语言的应用的启动事件,则创建子进程。
根据本发明一优选实施方式,该方法还包括:
若所述父进程接收到所述采用动态语言的应用的结束事件,则结束对应子进程。
根据本发明一优选实施方式,该方法还包括:
子进程结束后,分配给该子进程的第二内存空间被回收。
本发明还提供了一种动态语言的运行时环境处理装置,该装置包括:
父进程,用于在启动后,在被分配的第一内存空间加载动态语言的运行时环境;创建子进程;
子进程,用于在被分配的第二内存空间运行采用动态语言的应用;
其中若子进程存在多个,则多个第二内存空间分别被分配给各子进程。
根据本发明一优选实施方式,在操作系统启动完成后,或者在操作系统启动过程中,所述父进程启动。
根据本发明一优选实施方式,所述第一内存空间和第二内存空间分别对应不同的堆;或者,
所述第一内存空间和第二内存空间分别对应同一个堆中的不同区块。
根据本发明一优选实施方式,所述父进程向操作系统申请后被分配第一内存空间;
所述子进程被创建后,向操作系统申请后被分配第二内存空间。
根据本发明一优选实施方式,所述父进程,还用于若所述第一内存空间不足,则向所述操作系统申请对所述第一内存空间扩容;
所述子进程,还用于若第二内存空间不足,则向所述操作系统申请对对应的第二内存空间扩容。
根据本发明一优选实施方式,在第一内存空间加载的动态语言的运行时环境包括:执行引擎;
所述执行引擎用于在第二内存空间执行对应子进程的动态语言代码。
根据本发明一优选实施方式,所述第一内存空间包括:新生区new space、老生指针区old pointer space、老生数据区old data space、大对象区large objectspace和代码区code space;
所述第二内存空间包括:新生区new space、老生指针区oldpointer space和老生数据区old data space。
根据本发明一优选实施方式,所述父进程获取到所述采用动态语言的应用的启动事件时,执行所述创建子进程的操作。
根据本发明一优选实施方式,所述父进程,还用于若接收到所述采用动态语言的应用的结束事件,则结束对应子进程;
其中,子进程结束后,分配给该子进程的第二内存空间被回收。
本发明提供了一种设备,包括
存储器,包括一个或者多个程序;
一个或者多个处理器,耦合到所述存储器,执行所述一个或者多个程序,以实现如下操作:
父进程启动,第一内存空间被分配以加载动态语言的运行时环境;
所述父进程创建子进程,第二内存空间被分配给所述子进程以运行采用动态语言的应用;
其中若子进程存在多个,则多个第二内存空间分别被分配给各子进程。
由以上技术方案可以看出,本发明在父进程启动时,被分配第一内存空间以加载动态语言的运行时环境,而针对采用动态语言的应用创建子进程后,由各子进程共享在第一内存空间加载的运行时环境,而在各子进程分别被分配的第二内存空间运行应用代码。这种共享运行时环境的方式,相比较现有技术中针对各应用分别独立加载运行时环境的方式,降低了对内存的占用。
【附图说明】
图1为本发明实施例提供的方法流程图;
图2为本发明实施例提供的一种内存分配的示意图;
图3为本发明实施例提供的一种运行时环境的区域构成示意图;
图4为本发明实施例提供的装置结构图;
图5为本发明实施例提供的设备结构图;
图6为本发明实施例提供的一个应用实例的示意图。
【具体实施方式】
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
图1为本发明实施例提供的方法流程图,如图1中所示,该方法可以包括以下步骤:
在101中,父进程启动。
在本发明实施例中,当操作系统启动完成后,或者在操作系统启动过程中,可以启动一个进程,该进程作为所有采用动态语言的应用的父进程,用于加载动态语言的运行时环境,并创建各采用动态语言应用的子进程。因此,该父进程可以看做是一个“孵化器”进程。
在102中,第一内存空间被分配以加载动态语言的运行时环境。
父进程启动后,操作系统可以为该父进程分配一个内存空间,在此称为第一内存空间,该第一内存空间用于加载动态语言的运行时环境。其中,在父进程启动后,操作系统可以主动为该父进程分配一个内存空间。但现有内存分配机制是基于进程请求的,因此作为一种优选的实施方式,父进程在启动后,向操作系统请求内存分配,操作系统应该请求为父进程分配第一内存空间。分配的第一内存空间可以是预设大小。
父进程加载的运行时环境主要包括执行引擎,该执行引擎主要作为动态语言的应用的代码解释器,即当动态语言应用启动后,由执行引擎执行该动态语言应用的代码,即通常所说的“跑代码”。在本发明实施例中,该运行时环境由各采用动态语言的应用所共享,即预先由“孵化器”进程这一父进程加载执行引擎,后续启动的所有动态语言的应用的代码均由该执行引擎来执行。除了执行引擎之外,运行时环境还可以包括诸如虚拟机等。
在103中,父进程创建子进程。
当有采用动态语言的应用启动时,父进程获取到采用动态语言的应用的启动事件,就可以针对该应用创建一个子进程。所有采用动态语言的应用都作为上述“孵化器”进程的子进程。
在104中,第二内存空间被分配给子进程以运行采用动态语言的应用。
子进程被创建后,操作系统可以为该子进程分配一个内存空间,其与上述第一内存空间是相互独立的两个内存空间,在此称为第二内存空间,该第二内存空间用于运行采用动态语言的应用。只要有子进程被创建,操作系统都会为创建的子进程分配第二内存空间,每个子进程对应的第二内存空间分别是相互独立的、不同的内存空间。
其中,在子进程被创建后,操作系统可以主动为该子进程分配一个内存空间。但现有内存分配机制是基于进程请求的,因此作为一种优选的实施方式,子进程在被创建后,可以向操作系统请求内存分配,操作系统应该请求为子进程分配第二内存空间。分配的第二内存空间可以是预设大小。
与现有技术中不同的是,现有技术中,当采用动态语言的应用对应的进程启动后,会针对各进程分别加载动态语言的运行时环境,包括执行引擎、虚拟机等。而在本发明实施例中,在“孵化器”进程这一父进程启动后,就加载动态语言的运行时环境,包括执行引擎、虚拟机等,这部分为采用动态语言的应用在启动时所需要的运行时环境,通常在5~10M,在本发明实施例中是各子进程所共享的部分。而在各采用动态语言的应用对应的子进程被创建后,只需要共享父进程已加载的运行时环境,直接由共享的运行时环境包含的执行引擎在第二内存空间执行对应子进程的动态语言代码,这部分动态语言代码的实现也属于运行时环境的一部分,但这部分运行时环境属于子进程所私有。即在动态语言代码的执行过程中,所有需要使用内存的变量、对象、函数等,都在该第二内存空间被分配。由于各子进程执行代码过程都在第二内存空间进行,因此对其共享的部分即第一内存空间的修改很少,甚至不会产生修改。
另外,对于上述第一内存空间和第二内存空间可以采用内存本身的垃圾回收机制,清除掉已经不再使用但仍然占用内存的对象,从而释放内存。
更进一步地,若第一内存空间不足,父进程可以向操作系统申请对第一内存空间进行扩容。同样,若第二内存空间不足,对应子进程也可以向操作系统申请对第二内存空间进行扩容。例如当第一内存空间的使用率超过预设阈值,例如90%,则可以向操作系统申请对第一内存空间扩容。该扩容机制可以与上述垃圾回收机制配合使用,例如可以先采用垃圾回收,若释放内存后仍然内存不足,则可以向操作系统申请扩容。
上面已经提及,父进程被分配的第一内存空间和子进程被分配的第二内存空间是相互独立的内存空间,在本发明实施例中,第一内存空间和第二内存空间可以分别采用不同的堆。即针对父进程分配父堆,由父堆加载运行时环境,针对子进程分别分配子堆,由各子堆来执行各应用的代码。父堆由各子进程共享,子堆分别由各子进程私有,如图2中所示。
除了上述采用“双堆”的方式之外,还可以采用其他方式来区分第一内存空间和第二内存空间。例如,第一内存空间和第二内存空间可以分别为同一个堆中的不同区块,即只使用一个堆,但通过同一个堆中的不同区块来区分父进程和子进程的内存空间。
为了方便理解,首先对运行时环境的区域构成进行简单介绍。如图3中所示,一般情况下,运行时环境由5个区域构成,每个区域都由一组内存页构成,一个内存页是一块连续的内存。这5个区域分别是:
新生区(new space)、老生指针区(oldpointer space)、老生数据区(old dataspace)、大对象区(large object space)和代码区(code space)。
其中,大多数对象被分配在新生区,这个区域的对象分配和垃圾回收非常频繁。老生指针区包含大多数可能存在指向其他对象的指针的对象,大多数在新生区存活一段时间之后的对象都会被移动至这里。老生数据区存放只包含原始数据的对象,例如字符串,在新生区存活一段时间的对象也会被移动到这里。大对象区存放体积很大的对象。代码区存放代码对象,也就是包含指令的对象,拥有执行权限。
在本发明实施例中,针对父进程分配的第一内存空间可以包括上述的5个区域,即当父进程启动后,操作系统在一个堆中为父进程创建上述5个区域。当子进程被创建后,在该堆中针对子进程再次创建新生区、老生指针区和老生数据区,以此来隔离父进程和子进程在同一个堆中的不同内存空间。
若某个采用动态语言的应用结束,则父进程会接收到该应用的结束事件,此时父进程结束对应子进程。子进程结束后,分配给该子进程的第二内存空间被回收,回收后的内存空间可以被再次分配给其他进程使用。具体地,当子进程结束后,操作系统会获知子进程结束的事件,就可以回收分配给该子进程的第二内存空间。
本发明涉及的动态语言可以包括但不限于JavaScript、Python、Ruby等。
需要说明的是,上述方法的执行主体可以为动态语言的运行时环境处理装置,该装置可以位于本地终端的应用,或者还可以为位于本地终端的应用中的插件或软件开发工具包(Software Development Kit,SDK)等功能单元,或者,还可以位于服务器端,本发明实施例对此不进行特别限定。
图4为本发明实施例提供的装置结构图,如图4所示,该装置可以包括:
父进程00负责在启动后,在被分配的第一内存空间加载动态语言的运行时环境;还负责创建子进程01。其中,父进程00可以在操作系统启动完成后,或者在操作系统启动过程中启动。父进程00可以在获取到采用动态语言的应用的启动事件时,创建子进程01。
子进程01负责在被分配的第二内存空间运行采用动态语言的应用。其中,上述子进程01可以存在多个,若存在多个子进程01,则多个第二内存空间分别被分配给各子进程01。
上述第一内存空间和第二内存空间可以分别为不同的堆;或者,第一内存空间和第二内存空间可以分别为同一个堆中的不同区块。具体地,第一内存空间可以包括:新生区(new space)、老生指针区(oldpointer space)、老生数据区(old data space)、大对象区(large object space)和代码区(code space)。第二内存空间可以包括:新生区(newspace)、老生指针区(oldpointer space)和老生数据区(old data space)。
上述第一内存空间和第二内存空间可以由操作系统分类,优选地,父进程00可以向操作系统申请后被分配第一内存空间;子进程01被创建后,向操作系统申请后被分配第二内存空间。
若第一内存空间不足,则父进程00向操作系统申请对第一内存空间扩容;若第二内存空间不足,则对应子进程01可以向操作系统申请对第二内存空间扩容。
上述动态语言的运行时环境可以包括:执行引擎02;执行引擎02用于在第二内存空间执行对应子进程的动态语言代码。
另外,若父进程接收到采用动态语言的应用的结束事件,则可以结束对应子进程01。子进程01结束后,分配给该子进程01的第二内存空间被回收。具体地,当子进程01结束后,操作系统会获知子进程01结束的事件,就可以回收分配给该子进程01的第二内存空间。
本发明实施例提供的上述方法和装置可以以设置并运行于设备中的计算机程序体现。该设备可以包括一个或多个处理器,还包括存储器和一个或多个程序,如图5中所示。其中该一个或多个程序存储于存储器中,被上述一个或多个处理器执行以实现本发明上述实施例中所示的方法流程和/或装置操作。例如,被上述一个或多个处理器执行的方法流程,可以包括:
父进程启动,第一内存空间被分配以加载动态语言的运行时环境;
所述父进程创建子进程,第二内存空间被分配给所述子进程以运行采用动态语言的应用;
其中若子进程存在多个,则多个第二内存空间分别被分配给各子进程。
上述设备可以分别是任意的用户设备,包括但不限于诸如:智能移动终端、智能家居设备、网络设备、可穿戴式设备、智能医疗设备、PC(个人计算机)等。其中智能移动设备可以包括诸如手机、平板电脑、笔记本电脑、PDA(个人数字助理)、互联网汽车等。智能家居设备可以包括智能家电设备,诸如智能电视、智能空调、智能热水器、智能冰箱、智能空气净化器等等,智能家居设备还可以包括智能门锁、智能插座、智能电灯、智能摄像头等。网络设备可以包括诸如交换机、无线AP、服务器等。可穿戴式设备可以包括诸如智能手表、智能眼镜、智能手环、虚拟现实设备、增强现实设备、混合现实设备(即可以支持虚拟现实和增强现实的设备)等等。智能医疗设备可以包括诸如智能体温计、智能血压仪、智能血糖仪等等。
举一个应用的实例:
假设在手机中安装了多个采用JavaScript的APP,APP1、APP2、和APP3。在手机操作系统启动后,“孵化器”进程启动,且该“孵化器”进程向操作系统申请并被分配父堆。“孵化器”进程在父堆加载包含JavaScript执行引擎、Java虚拟机等的运行时环境。当APP1启动时,“孵化器”进程创建子进程1,子进程1向操作系统申请并被分配子堆1,由JavaScript执行引擎在子堆1运行APP1的代码。APP2启动时,“孵化器”进程创建子进程2,子进程2向操作系统申请并被分配子堆2,由JavaScript执行引擎在子堆2运行APP2的代码。APP3启动时,“孵化器”进程创建子进程3,子进程3向操作系统申请并被分配子堆3,由JavaScript执行引擎在子堆3运行APP3的代码。可以看出,三个APP对应的子进程共享父堆中的运行时环境,各自具有独立的内存空间来运行代码。
一般JavaScript的APP启动时所需要的运行时环境大概在5~10M,本发明的方式中,这部分为三个子进程共享,相比较现有技术中,各APP分别占用独立的内存空间加载各自的运行时环境而言,降低了的内存占用量约为10~20M。运行的JavaScript的APP数量越多,对内存的节省效果越明显。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (21)
1.一种动态语言的运行时环境处理方法,其特征在于,该方法包括:
父进程启动,第一内存空间被分配以加载动态语言的运行时环境;
所述父进程创建子进程,第二内存空间被分配给所述子进程以运行采用动态语言的应用;
其中若子进程存在多个,则多个第二内存空间分别被分配给各子进程。
2.根据权利要求1所述的方法,其特征在于,所述父进程启动包括:
在操作系统启动完成后,所述父进程启动;或者,
在操作系统启动过程中,所述父进程启动。
3.根据权利要求1所述的方法,其特征在于,所述第一内存空间和第二内存空间分别对应不同的堆;或者,
所述第一内存空间和第二内存空间分别对应同一个堆中的不同区块。
4.根据权利要求1所述的方法,其特征在于,所述第一内存空间是由所述父进程在启动后,向操作系统申请后被分配的;
所述第二内存空间是子进程被创建后,由子进程向操作系统申请后被分配的。
5.根据权利要求4所述的方法,其特征在于,该方法还包括:
若所述第一内存空间不足,则所述父进程向所述操作系统申请对所述第一内存空间扩容;或者,
若第二内存空间不足,则对应子进程向所述操作系统申请对第二内存空间扩容。
6.根据权利要求1所述的方法,其特征在于,在第一内存空间加载的动态语言的运行时环境包括:执行引擎;
所述第二内存空间被分配给所述子进程以运行采用动态语言的应用包括:由所述执行引擎在第二内存空间执行对应子进程的动态语言代码。
7.根据权利要求1所述的方法,其特征在于,所述第一内存空间包括:新生区newspace、老生指针区old pointer space、老生数据区old data space、大对象区largeobject space和代码区code space;
所述第二内存空间包括:新生区new space、老生指针区old pointer space和老生数据区old data space。
8.根据权利要求1所述的方法,其特征在于,所述父进程创建子进程包括:
若所述父进程获取到所述采用动态语言的应用的启动事件,则创建子进程。
9.根据权利要求1所述的方法,其特征在于,该方法还包括:
若所述父进程接收到所述采用动态语言的应用的结束事件,则结束对应子进程。
10.根据权利要求9所述的方法,其特征在于,该方法还包括:
子进程结束后,分配给该子进程的第二内存空间被回收。
11.一种动态语言的运行时环境处理装置,其特征在于,该装置包括:
父进程,用于在启动后,在被分配的第一内存空间加载动态语言的运行时环境;创建子进程;
子进程,用于在被分配的第二内存空间运行采用动态语言的应用;
其中若子进程存在多个,则多个第二内存空间分别被分配给各子进程。
12.根据权利要求11所述的装置,其特征在于,在操作系统启动完成后,或者在操作系统启动过程中,所述父进程启动。
13.根据权利要求11所述的装置,其特征在于,所述第一内存空间和第二内存空间分别对应不同的堆;或者,
所述第一内存空间和第二内存空间分别对应同一个堆中的不同区块。
14.根据权利要求11所述的装置,其特征在于,所述父进程向操作系统申请后被分配第一内存空间;
所述子进程被创建后,向操作系统申请后被分配第二内存空间。
15.根据权利要求14所述的装置,其特征在于,所述父进程,还用于若所述第一内存空间不足,则向所述操作系统申请对所述第一内存空间扩容;
所述子进程,还用于若第二内存空间不足,则向所述操作系统申请对对应的第二内存空间扩容。
16.根据权利要求11所述的装置,其特征在于,在第一内存空间加载的动态语言的运行时环境包括:执行引擎;
所述执行引擎用于在第二内存空间执行对应子进程的动态语言代码。
17.根据权利要求11所述的装置,其特征在于,所述第一内存空间包括:新生区newspace、老生指针区old pointer space、老生数据区old data space、大对象区largeobject space和代码区code space;
所述第二内存空间包括:新生区new space、老生指针区old pointer space和老生数据区old data space。
18.根据权利要求11所述的装置,其特征在于,所述父进程获取到所述采用动态语言的应用的启动事件时,执行所述创建子进程的操作。
19.根据权利要求11所述的装置,其特征在于,所述父进程,还用于若接收到所述采用动态语言的应用的结束事件,则结束对应子进程。
20.根据权利要求19所述的装置,其特征在于,子进程结束后,分配给该子进程的第二内存空间被回收。
21.一种设备,包括
存储器,包括一个或者多个程序;
一个或者多个处理器,耦合到所述存储器,执行所述一个或者多个程序,以实现如下操作:
父进程启动,第一内存空间被分配以加载动态语言的运行时环境;
所述父进程创建子进程,第二内存空间被分配给所述子进程以运行采用动态语言的应用;
其中若子进程存在多个,则多个第二内存空间分别被分配给各子进程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610989665.9A CN108073452B (zh) | 2016-11-10 | 2016-11-10 | 一种动态语言的运行时环境处理方法、装置和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610989665.9A CN108073452B (zh) | 2016-11-10 | 2016-11-10 | 一种动态语言的运行时环境处理方法、装置和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108073452A true CN108073452A (zh) | 2018-05-25 |
CN108073452B CN108073452B (zh) | 2022-01-28 |
Family
ID=62154316
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610989665.9A Active CN108073452B (zh) | 2016-11-10 | 2016-11-10 | 一种动态语言的运行时环境处理方法、装置和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108073452B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109033429A (zh) * | 2018-08-10 | 2018-12-18 | 北京小米移动软件有限公司 | 文件的访问方法、装置及访问接口 |
CN111580975A (zh) * | 2020-05-07 | 2020-08-25 | 苏州思必驰信息科技有限公司 | 用于语音合成的内存优化方法及系统 |
CN115391032A (zh) * | 2022-08-15 | 2022-11-25 | 上海慧程工程技术服务有限公司 | 一种用于工业物联网边缘设备的内存优化方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1534472A (zh) * | 2003-03-31 | 2004-10-06 | 联想(北京)有限公司 | 动态扩充嵌入式计算机系统的实现方法 |
CN101833465A (zh) * | 2010-04-23 | 2010-09-15 | 中国科学院声学研究所 | 一种支持应用程序动态加载运行的嵌入式系统 |
US8176321B1 (en) * | 2010-05-18 | 2012-05-08 | Google Inc. | Safe installation of browser extensions |
CN102520934A (zh) * | 2011-11-29 | 2012-06-27 | 深圳市万兴软件有限公司 | 一种预览数据的方法和相关装置 |
CN103514007A (zh) * | 2012-08-31 | 2014-01-15 | Tcl集团股份有限公司 | 一种基于Android系统的移动终端的热启动的方法 |
CN103631612A (zh) * | 2012-08-23 | 2014-03-12 | 腾讯科技(深圳)有限公司 | 启动操作系统的方法与装置 |
-
2016
- 2016-11-10 CN CN201610989665.9A patent/CN108073452B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1534472A (zh) * | 2003-03-31 | 2004-10-06 | 联想(北京)有限公司 | 动态扩充嵌入式计算机系统的实现方法 |
CN101833465A (zh) * | 2010-04-23 | 2010-09-15 | 中国科学院声学研究所 | 一种支持应用程序动态加载运行的嵌入式系统 |
US8176321B1 (en) * | 2010-05-18 | 2012-05-08 | Google Inc. | Safe installation of browser extensions |
CN102520934A (zh) * | 2011-11-29 | 2012-06-27 | 深圳市万兴软件有限公司 | 一种预览数据的方法和相关装置 |
CN103631612A (zh) * | 2012-08-23 | 2014-03-12 | 腾讯科技(深圳)有限公司 | 启动操作系统的方法与装置 |
CN103514007A (zh) * | 2012-08-31 | 2014-01-15 | Tcl集团股份有限公司 | 一种基于Android系统的移动终端的热启动的方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109033429A (zh) * | 2018-08-10 | 2018-12-18 | 北京小米移动软件有限公司 | 文件的访问方法、装置及访问接口 |
CN111580975A (zh) * | 2020-05-07 | 2020-08-25 | 苏州思必驰信息科技有限公司 | 用于语音合成的内存优化方法及系统 |
CN111580975B (zh) * | 2020-05-07 | 2022-07-08 | 思必驰科技股份有限公司 | 用于语音合成的内存优化方法及系统 |
CN115391032A (zh) * | 2022-08-15 | 2022-11-25 | 上海慧程工程技术服务有限公司 | 一种用于工业物联网边缘设备的内存优化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108073452B (zh) | 2022-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20160299840A1 (en) | Coalition based memory management | |
JP4783471B2 (ja) | クラスが有するメソッドを呼出して実行するコンピュータ・システムが行う方法 | |
US5303392A (en) | Accessing current symbol definitions in a dynamically configurable operating system | |
US8566830B2 (en) | Local collections of tasks in a scheduler | |
US8549524B2 (en) | Task scheduler for cooperative tasks and threads for multiprocessors and multicore systems | |
US20040095387A1 (en) | Virtualized and realized user interface controls | |
CN108073452A (zh) | 一种动态语言的运行时环境处理方法、装置和设备 | |
CN108351792A (zh) | 使用应用容器管理代码和依赖性数据的传递 | |
CN102693159B (zh) | 基于用户模式多任务下控制硬件设备的方法及其装置 | |
US20040098724A1 (en) | Associating a native resource with an application | |
US20100293538A1 (en) | Dynamic program updating in a continuation based runtime | |
TW200408979A (en) | System and method for associating properties with objects | |
CN103440304B (zh) | 一种图片存储方法及存储装置 | |
CN106156301B (zh) | 一种大字段数据的处理方法及装置 | |
EP1016963A2 (en) | Run-time addition of interfaces | |
CN1114154C (zh) | 数据处理 | |
JPH06222999A (ja) | スワップ・ブロック組立方法及びメモリ管理機構 | |
US8813054B2 (en) | Sequential-code optimization of parallel code based on identifying siloed program references | |
EP1014264A2 (en) | A system and method for facilitating safepoint synchronization in a multithreaded computer system | |
CN106445656A (zh) | 一种实现线程本地存储的方法及装置 | |
CN110471700A (zh) | 图形处理方法、装置、存储介质及电子设备 | |
JP5076417B2 (ja) | 概念ネットワーク生成システム、概念ネットワーク生成方法及び概念ネットワーク生成プログラム | |
US8166468B2 (en) | Refractor inner class with object-oriented program optimizer tool for reduced footprint and faster application start | |
CN106951326A (zh) | 一种文件解锁方法及电子设备 | |
CN111475299A (zh) | 内存分配方法、装置、存储介质及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |