CN106095499A - 嵌入式系统启动优化方法及装置 - Google Patents
嵌入式系统启动优化方法及装置 Download PDFInfo
- Publication number
- CN106095499A CN106095499A CN201610399093.9A CN201610399093A CN106095499A CN 106095499 A CN106095499 A CN 106095499A CN 201610399093 A CN201610399093 A CN 201610399093A CN 106095499 A CN106095499 A CN 106095499A
- Authority
- CN
- China
- Prior art keywords
- class
- prestrain
- host
- current
- thread
- 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.)
- Pending
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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- 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/4401—Bootstrapping
-
- 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
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了嵌入式系统启动优化方法及装置,该方法包括:在采用多线程并行加载嵌入式系统启动所需的预加载类前,检测当前的预加载类是否为内部类;若是,则解析出当前的预加载类所属的宿主类;并确定出该宿主类的加载线程;在所述宿主类加载完之后,通过所述加载线程加载所述当前的预加载类。应用本发明,可避免内部类加载无基础的异常情况,保障嵌入式系统的预加载类的正常加载的同时,提高嵌入式系统运行的稳定性,从而提高用户体验。
Description
技术领域
本发明涉及操作系统技术领域,具体而言,本发明涉及嵌入式系统启动优化方法及装置。
背景技术
智能电视具有全开放式平台,搭载了操作系统,可以由用户自行安装和卸载软件、游戏等第三方服务商提供的应用程序,拥有传统电视厂商所不具备的应用平台优势。
目前,智能电视通常可以搭载Android(安卓)操作系统等嵌入式系统;在智能电视完成嵌入式系统的启动之后,用户可以通过已安装的各种应用程序,实现网络搜索、视频点播、数字音乐、网络新闻、网络视频电话等各种应用服务,带给用户更便捷的体验。
实际应用中,嵌入式系统的启动流程包括如下基本步骤:系统上电、系统引导程序、启动内核Kernel、创建初始化进程Init、创建系统运行所需软件库Runtime、创建守护进程Demons、创建用户进程孵化器Zygote、创建虚拟机VM、创建系统服务进程System Server、启动应用启动器Launcher。
事实上,嵌入式系统的启动过程中,需要载入一系列基础类(本文中也可称为预加载类)。通过Zygote进程将这些基础类作为嵌入式系统的预加载类载入后,这些预加载类将常驻于内存。这样,后续应用或者服务启动时,就不需要再去加载这些预加载类,以此减少应用或者服务的启动时间。
但是随着智能电视中安装的应用程序的增加,本发明的发明人发现,嵌入式系统需要载入的基础类也越来越多,智能电视的启动速度越来越慢,降低了用户体验。
虽然,现有提供了多线程并行加载的方案,以此加快启动速度。但是,本发明的发明人发现,在应用现有并行加载方案中,经常发生加载异常,导致系统运行异常。
因此,有必要提供一种能够保障预加载类的正常加载,提高嵌入式系统运行的稳定性的启动优化方案。
发明内容
针对上述现有技术存在的缺陷,本发明提供了嵌入式系统启动优化方法及装置,用以保障嵌入式系统的预加载类的正常加载的同时,提高嵌入式系统运行的稳定性,从而提高用户体验。
本发明提供了一种嵌入式系统启动优化方法,其特征在于,包括:
在采用多线程并行加载嵌入式系统启动所需的预加载类前,检测当前的预加载类是否为内部类;
若是,则解析出当前的预加载类所属的宿主类;并确定出该宿主类的加载线程;
在所述宿主类加载完之后,通过所述加载线程加载所述当前的预加载类。
根据本发明的另一方面,还提供了一种嵌入式系统启动优化装置,包括:
类检测单元,用于在采用多线程并行加载嵌入式系统启动所需的预加载类前,检测当前的预加载类是否为内部类;
类解析单元,用于若当前的预加载类为内部类,则解析出当前的预加载类所属的宿主类;
线程确定单元,用于若当前的预加载类为内部类,则确定当前的预加载类所属的宿主类的加载线程;
类加载单元,用于若当前的预加载类为内部类,则在当前的预加载类所属的宿主类加载完之后,通过所述线程确定单元确定出的加载线程加载当前的预加载类。
本发明的方案中,在加载嵌入式系统启动所需的预加载类之前,对预加载类的类型进行检测,若预加载类为内部类,则需要在加载完该内部类所属的宿主类之后,通过该宿主类的加载线程来加载其内部类。这样,可以保证宿主类与其内部类由同一线程加载,且避免出现宿主类未加载而内部类先加载,致使内部类因无加载基础而加载失败的异常情况,从而防止因预加载类的加载异常导致嵌入式系统后续的运行异常,提高了嵌入式系统运行的稳定性。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例的嵌入式系统启动优化方法的流程示意图;
图2为本发明实施例的嵌入式系统启动优化装置的结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
本技术领域技术人员可以理解,这里所使用的“终端”、“终端设备”既包括无线信号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件的设备,其具有能够在双向通信链路上,进行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备;PCS(Personal Communications Service,个人通信系统),其可以组合语音、数据处理、传真和/或数据通信能力;PDA(Personal Digital Assistant,个人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日历和/或GPS(Global Positioning System,全球定位系统)接收器;常规膝上型和/或掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其他设备。这里所使用的“终端”、“终端设备”可以是便携式、可运输、安装在交通工具(航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式,运行在地球和/或空间的任何其他位置运行。这里所使用的“终端”、“终端设备”还可以是通信终端、上网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
本发明的发明人发现,现有智能电视的启动速度慢的主要原因在于:Zygote(用户进程孵化器)创建后,采用单线程加载,即串行加载的方式来加载这些预加载类。事实上,嵌入式系统所需加载的预加载类往往有数百上千,若以单任务循环顺序加载嵌入式系统中所有预加载类,不仅耗费时间长;而且,对于多核CPU来说,加载过程中仅仅使用了一个内核,实际上造成了其他内核的浪费。而实际应用中,Zygote加载完预加载类之后,SystemServer才能进行后续的操作来完成嵌入式系统的启动。因此,预加载类的加载速度限制了嵌入式系统的启动速度。
故而本发明的发明人考虑,可以根据嵌入式系统CPU(Central Processing Unit,中央处理器)的核数,启动多线程;之后,采用多线程并行加载嵌入式系统所需要的预加载类。这样,以并行的方式加载预加载类,相比现有单线程加载的方式,可以提高预加载类的加载速度,从而提高嵌入式系统的启动速度。
进一步地,本发明的发明人发现,嵌入式系统所需加载的预加载类中有些预加载类存在内部类(inner class)。实际应用中,java语言中载入一个类时,确定类的信息的标准格式:
package1[.package2…].classname$subclassname。
其中,classname为宿主类的名称,subclassname为宿主类的内部类的名称。这样,系统会按照package1/package2/../packageN/class,找到类及其内部类,并加载到内存中。
实际应用中,可以将嵌入式系统所需加载的预加载类划分为三种:包括内部类的预加载类、作为内部类而存在的预加载类、以及不包括内部类且不作为内部类而存在的预加载类。为了便于描述,本文可以将包括内部类的预加载类、以及不包括内部类且不作为内部类而存在的预加载类,均称为宿主类。也就是说,对于有些宿主类,其包括内部类,如表1所示,编号37-41的预加载类是编号36的预加载类的内部类;编号36的预加载类为编号37-41的预加载类所属的宿主类(host class)。而对于有些宿主类其不包括内部类,比如,编号34、35、42-44的预加载类为不包括内部类的宿主类。
表1预加载类配置文件
考虑到,实际应用中,内部类的加载会依赖其宿主类的加载,即必须在宿主类加载完成后才能加载该宿主类的内部类,否则,内部类的加载会因为无加载基础而加载失败,导致后续系统运行发生异常。因此,若采用多线程并行加载预加载类,有可能会发生下面的情况从而导致加载失败:线程A正在开始加载宿主类X,但是没有加载完成。这时线程B也开始加载宿主类X的内部类X1。这时就会发生加载异常,导致系统运行异常。
为了避免上述情况的发生,本发明的发明人考虑,在加载预加载类的之前,可以对当前的预加载类进行检测,判断当前的预加载类是否为内部类,如果是,则确定其所属宿主类的线程,在该线程完成宿主类的加载之后,再来加载该内部类,以此保证一个宿主类以及该宿主类的所有内部类都由一个线程加载,且按照先宿主后内部的顺序完成内部类的正常加载,从而保障系统的正常运行。
下面将结合附图来详细说明本发明的技术方案。
实际应用中,本发明提供的嵌入式系统的启动优化方案中,在嵌入式系统启动的初始阶段,需要进行系统上电、系统引导程序、启动内核(Kernel)、以及创建初始化进程(Init)。之后,可以通过创建的初始化进程来创建Zygote(孵化器)进程。而且,通过初始化进程还可以创建Runtime(系统运行所需软件库)、以及Daemon(守护进程)。
Zygote进程在创建之后,可以创建VM(Virtual Memory,虚拟存储器),并且在创建的VM启动时赋予各种参数。比如,一般情况下一个应用程序加载的内存不能超过16mb,因此,通过Zygote进程可以设置heapsize参数为16mb来。其中,heapsize参数表示单个进程可用的最大内存。Zygote进程创建并启动VM虚拟机之后,可以为java的类注册JNI(JavaNative Interface,Java本地接口)函数,以便Zygote进程能够调用Java代码。进而加载嵌入式系统所需的java类以及一些嵌入式系统资源。
实际应用中,嵌入式系统所需的预加载类往往具有一千多个,并且存在大量的加载时间超过1250微秒的预加载类。若按照现有单线程加载这些预加载类,将会耗费大量的时间,严重影响嵌入式系统的启动时间。
而本发明的发明人发现,实际应用中,随着多核技术的发展,目前的智能终端可以在一枚处理器中集成两个或多个完整的计算引擎(内核)。因此,本发明的发明人考虑可以通过划分任务,使得线程应用能够充分利用多个执行内核,并可在特定的时间内执行更多任务。因此,本发明的方案中,通过Zygote进程加载预加载类之前,可先根据中央处理器的核数,启动多个线程来并行加载预加载类,提高系统启动速度。
为了避免多线程并行加载时出现宿主类未加载而内部类先加载,致使内部类因无加载基础而加载失败的异常情况,本发明提供了一种嵌入式系统启动优化方法,其具体流程如图1所示,可以包括如下步骤:
S101:在采用多线程并行加载嵌入式系统启动所需的预加载类前,检测当前的预加载类是否为内部类,若是,则执行步骤S102;若否,执行步骤S104。
考虑到,实际应用中,含有嵌入式系统所有预加载类的名单的预加载类配置文件中,如表1所示,可以将预加载类逐行记录;对于每个宿主类,其内部类将在宿主类的记录之后连续记录。其中,预加载类可按照预设的格式进行记录,比如,<宿主类>$<内部类>;或者[任意多个字符N1]$[任意多个字符N2],其中,N1表示宿主类,N2表示内部类。对于内部类,其在内部类位置上往往记录了该内部类的名称,在宿主类位置上记录了所属宿主类的名称;而对于宿主类,其在内部类位置上并没有记录,即在内部类位置上对应记录的内容为空。
因此,本发明实施例中,在采用多线程并行加载嵌入式系统启动所需的预加载类前,可以针对当前的预加载类,按照预设的解析格式,解析当前的预加载类,以获取当前的预加载类在内部类位置上对应记录的内容。
继而,检测当前的预加载类在内部类位置上对应记录的内容是否为空;若是,则确定当前的预加载类为宿主类,执行步骤S104;否则,确定当前的预加载类为内部类,执行步骤S102。其中,预设的解析格式中包括宿主类位置和内部类位置,宿主类位置与内部类位置之间可以设有间隔符。
例如,在嵌入式系统启动中,Zygote进程可以按序读取预加载类配置文件中的预加载类N;按照<宿主类>$<内部类>的格式解析当前待加载的预加载类N,检测当前的预加载类N是否为内部类。
例如,<宿主类>$<内部类>的格式中,宿主类记录为HC,内部类记录为IC,若检测当前的预加载类N中,IC为空,则说明当前的预加载类N不是内部类;若检测当前的预加载类N中,IC不为空,则说明当前的预加载类N是内部类。
或者,将当前的预加载类N与预设的格式[N1]$[N2]进行匹配,如果与[N1]$[N2]匹配成功,则该类为内部类;否则,该类为宿主类。
若确定当前的预加载类N为宿主类,则执行步骤S104;若确定当前的预加载类N为内部类,则执行步骤S102。
S102:若当前的预加载类是内部类,则解析出当前的预加载类所属的宿主类;并确定出该宿主类的加载线程。
本发明的方案采用多线程并行加载预加载类,为保证内部类的加载存在加载基础,可以让宿主类与其内部类由同一个线程来加载,且在该线程加载宿主类之后,才加载其内部类。
因此,本发明实施例中,在确定当前的预加载类为内部类之后,需要确定其所属宿主类的加载线程,并将宿主类的加载线程作为当前的预加载类的加载线程。
具体地,若通过步骤S101检测当前的预加载类,确定当前的预加载类是内部类,则可以按照预设的解析格式,解析当前的预加载类,以获取其在宿主类位置上对应记录的内容;将获取的内容确定为当前的预加载类所属的宿主类。
接上例,<宿主类>$<内部类>的格式中,宿主类记录为HC,内部类记录为IC,若检测当前的预加载类N中,IC不为空,则可以解析获取当前的预加载类N中HC所对应的内容,并将获取的内容确定为当前的预加载类N所属的宿主类。
实际应用中,若预加载类配置文件严格按照要求,在记录宿主类之后,紧接着记录宿主类的内部类,则在确定当前的预加载类之后,也可以从预加载类配置文件中确定上一次检测为宿主类的预加载类,作为当前的预加载类所属的宿主类。
在确定出作为内部类的当前的预加载类所属的宿主类之后,确定出宿主类的加载线程。具体地,可以查找出当前空闲的线程,并确定为该宿主类的加载线程;或者,将宿主类所对应的预设的线程确定为该宿主类的加载线程;或者,将当前正加载宿主类的线程确定为该宿主类的加载线程。
其中,宿主类所对应的预设的线程,可以是指在Zygote进程加载预加载类之前预先针对系统启动所需的宿主类进行对应设置的线程。
考虑到,通过多线程来并行加载嵌入式系统所需的预加载类,将可能面临预加载类的分配问题,即预加载类由哪个进程来执行的问题。由于实际应用中,嵌入式系统所需的预加载类中存在一些相互依赖的预加载类。例如,预加载类A与预加载类B之间存在依赖关系,即如果要加载预加载类A必须加载预加载类B。
因此,为了避免预加载类之间的相互影响,在进行加载之前,可以预先对预加载类配置文件中的部分预加载类进行分组,以使得群组中的预加载类与其它群组中的预加载类互不依赖。具体地,在获取中央处理器的核数之后,可以读取预加载类配置文件,从中获取所有的宿主类;并根据获取的核数,将获取的所有的宿主类划分到相应数量的群组中。其中,群组中的预加载类与其它群组中的预加载类互不依赖。这样,在嵌入式系统启动过程中,可以根据中央处理器的核数,启动相应数量的线程,分别对应不同的群组,用于加载所对应的群组中的预加载类。宿主类所对应的预设的线程为宿主类所属群组所对应的线程。
其中,中央处理器CPU的核数可以通过读取系统文件cat/proc/cpuinfo,过滤其中的processor字段来获取。例如,如果嵌入系统中有两个核,则通过上述方法过滤过得到的结果将为:
processor:0
processor:1
例如,在中央处理器的核数具体为4个的情况下,可以将嵌入式系统的预加载类配置文件中所有的宿主类划分到4个群组中。这样,后续在加载预加载类的过程中,可以通过4个线程,并行加载各自对应的群组中的预加载类,宿主类的加载线程为其所属群组所对应的线程。
S103:在宿主类加载完之后,通过宿主类的加载线程加载当前的预加载类。
实际应用中,含有嵌入式系统所有预加载类的名单的预加载类配置文件中每个宿主类的内部类连续记录。因此,正常情况下会先读取宿主类,后读取该宿主类的内部类。这样,在完成宿主类的加载之后才会进行该宿主类的内部类的读取、检测、加载等操作。然而,由于内部类的加载依赖其宿主类的加载,因此,若出现先读取某一宿主类的内部类,后读取该内部类所属宿主类的异常情况,在确定内部类所属宿主类的加载线程之后,需要等待由该线程加载宿主类结束之后,才能加载该内部类,以避免系统运行发生异常。
具体地,为了保证内部类的加载存在加载基础,在通过步骤S102确定出当前的预加载类所属宿主类,以及宿主类的加载线程之后,可以检测宿主类的加载线程是否已经完成宿主类的加载,在宿主类加载完之后,通过该加载线程加载当前的预加载类宿主类的内部类,即宿主类的内部类。
实际应用中,完成当前的预加载类的加载之后,可以读取预加载类配置文件中的下一个待加载的预加载类,执行步骤S101;若当前的预加载类为预加载类配置文件中最后一个预加载类,则可以通过系统服务进程System Server的创建、应用启动器Launcher的启动等操作,来完成嵌入式系统的启动。
S104:若待加载的预加载类不是内部类,则确定当前的预加载类为宿主类,确定出该宿主类的加载线程,通过确定出的加载线程加载当前的预加载类。
本发明实施例中,若通过步骤S101检测当前的预加载类,确定当前的预加载类不是内部类,则说明当前的预加载类为包括内部类的宿主类,或者不包括内部类且不作为内部类存在的预加载类。本文中,可以将包括内部类的预加载类、以及不包括内部类且不作为内部类而存在的预加载类,均称为宿主类。因此,本文中,若确定当前的预加载类不是内部类,则可以确定当前的预加载类为宿主类。
为了完成嵌入式系统的启动,在确定当前的预加载类为宿主类之后,可以继而确定宿主类的加载线程。具体地,可以查找出当前空闲的线程,并确定为该宿主类的加载线程;或者,将宿主类所对应的预设的线程确定为该宿主类的加载线程;或者,将当前正加载宿主类的线程确定为该宿主类的加载线程。
其中,宿主类所对应的预设的线程,可以是指在Zygote进程加载预加载类之前预先针对系统启动所需的宿主类进行对应设置的线程。具体地,根据中央处理器的核数,将所有的宿主类划分到相应数量的群组中。其中,群组中的预加载类与其它群组中的预加载类互不依赖。这样,在嵌入式系统启动过程中,可根据中央处理器的核数,启动相应数量的线程,分别对应不同的群组,用于加载所对应的群组中的预加载类。因此,可以直接查找出该预加载类所在的群组,将查找出的群组所对应的线程作为当前的预加载类的加载线程;并通过确定出的加载线程加载当前的预加载类。
实际应用中,完成当前的预加载类的加载之后,可以读取预加载类配置文件中的下一个待加载的预加载类,执行步骤S101。若当前的预加载类为预加载类配置文件中最后一个预加载类,则可以通过系统服务进程System Server的创建、应用启动器Launcher的启动等操作,来完成嵌入式系统的启动。
本发明实施例中,通过步骤S103和/或步骤S104,加载完嵌入系统所需的所有预加载类之后,可以进一步地通过Zygote进程创建嵌入式系统的系统服务System Server进程。之后,由创建的System Server进程所启动的Activity Manager Service(活动管理器服务)来启动嵌入式系统的Launcher(应用启动器)。
实际应用中,Activity Manager Service和Package Manager Service(应用程序管理服务)一样,都是在嵌入式系统启动时由System Server(系统服务)进程启动的。
具体地,System Server进程首先启动Package Manager Service,并由PackageManager Service来负责安装嵌入式系统的应用程序:Package Manager Service扫描嵌入式系统中特定的目录,从中找出应用程序文件(比如,以Apk为后缀的文件);然后,PackageManager Service对查找出的应用程序文件进行解析,得到应用程序的相关信息;基于得到的应用程序的相关信息,完成应用程序的安装过程。
嵌入式系统中的应用程序安装好了以后,System Server进程接下来就要通过Activity Manager Service来启动应用程序Launcher了。进而,Launcher在启动的时候可以通过Package Manager Service把嵌入式系统中已经安装好的应用程序以快捷图标的形式展示在智能终端的桌面上,就完成了嵌入式系统的启动,这样用户就可以使用这些应用程序了。
基于上述提供的嵌入式系统启动优化方法,本发明还提供了一种嵌入式系统启动优化装置,如图2所示,包括:类检测单元201、类解析单元202、线程确定单元203、类加载单元204。
其中,类检测单元201用于在采用多线程并行加载嵌入式系统启动所需的预加载类前,检测当前的预加载类是否为内部类。
具体地,类检测单元201可以按照预设的解析格式,解析当前的预加载类,以获取其在内部类位置上对应记录的内容;检测当前的预加载类在内部类位置上对应记录的内容是否为空;若是,则确定当前的预加载类为宿主类;否则,确定当前的预加载类是内部类。
类解析单元202用于若当前的预加载类为内部类,则解析出当前的预加载类所属的宿主类。
具体地,若当前的预加载类为内部类,则类解析单元202可以按照预设的解析格式,解析当前的预加载类,以获取其在宿主类位置上对应记录的内容;将获取的内容确定为当前的预加载类所属的宿主类。
线程确定单元203用于若当前的预加载类为内部类,则确定当前的预加载类所属的宿主类的加载线程。
具体地,线程确定单元具体用于查找出当前空闲的线程,并确定为宿主类的加载线程;或将宿主类所对应的预设的线程确定为宿主类的加载线程;或将当前加载宿主类的线程确定为宿主类的加载线程。
类加载单元204用于若当前的预加载类为内部类,则在当前的预加载类所属的宿主类加载完之后,通过线程确定单元203确定出的加载线程加载当前的预加载类。
进一步地,线程确定单元203还用于若当前的预加载类为宿主类,则确定出该宿主类的加载线程。相应地,类加载单元204还用于确定当前的预加载类为宿主类时,通过线程确定单元203确定出的加载线程加载当前的预加载类。
本发明实施例中,嵌入式系统启动优化装置中的各个单元的具体功能实现可以参考上述嵌入式系统启动优化方法中各个步骤的具体实现,在此不再赘述。
为减少预加载类的加载时间,提高嵌入式系统的启动速度,相比现有多线程并行加载方案,本发明的方案中,在采用采用多线程并行加载嵌入式系统启动所需的预加载类前,通过预加载类的检测和内部类所属宿主类的加载线程的确定,保证宿主类与其内部类由同一线程加载,且先加载宿主类后加载内部类,避免了内部类的加载无加载基础而出现加载失败的异常情况,从而保障系统后续的正常运行,提高了系统运行的稳定性。
本技术领域技术人员可以理解,本发明包括涉及用于执行本申请中所述操作中的一项或多项的设备。这些设备可以为所需的目的而专门设计和制造,或者也可以包括通用计算机中的已知设备。这些设备具有存储在其内的计算机程序,这些计算机程序选择性地激活或重构。这样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在适于存储电子指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随即存储器)、EPROM(Erasable ProgrammableRead-Only Memory,可擦写可编程只读存储器)、EEPROM(Electrically ErasableProgrammable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。
本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
本技术领域技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种嵌入式系统启动优化方法,其特征在于,包括:
在采用多线程并行加载嵌入式系统启动所需的预加载类前,检测当前的预加载类是否为内部类;
若是,则解析出当前的预加载类所属的宿主类;并确定出该宿主类的加载线程;
在所述宿主类加载完之后,通过所述加载线程加载所述当前的预加载类。
2.根据权利要求1所述的方法,其特征在于,所述检测当前的预加载类是否为内部类后,还包括:
若否,则确定当前的预加载类为宿主类,确定出所述宿主类的加载线程,通过所述加载线程加载所述当前的预加载类。
3.根据权利要求1或2所述的方法,其特征在于,所述检测当前的预加载类是否为内部类,具体包括:
按照预设的解析格式,解析当前的预加载类,以获取其在内部类位置上对应记录的内容;
检测当前的预加载类在内部类位置上对应记录的内容是否为空;
若是,则确定当前的预加载类为宿主类;否则,确定当前的预加载类为内部类。
4.根据权利要求3所述的方法,其特征在于,所述解析出当前的预加载类所属的宿主类,具体包括:
按照预设的解析格式,解析当前的预加载类,以获取其在宿主类位置上对应记录的内容;
将获取的内容确定为当前的预加载类所属的宿主类。
5.根据权利要求1或2所述的方法,其特征在于,所述确定出该宿主类的加载线程,具体包括:
查找出当前空闲的线程,并确定为该宿主类的加载线程;或
将宿主类所对应的预设的线程确定为该宿主类的加载线程;
或将当前正加载宿主类的线程确定为该宿主类的加载线程。
6.一种嵌入式系统启动优化装置,其特征在于,包括:
类检测单元,用于在采用多线程并行加载嵌入式系统启动所需的预加载类前,检测当前的预加载类是否为内部类;
类解析单元,用于若当前的预加载类为内部类,则解析出当前的预加载类所属的宿主类;
线程确定单元,用于若当前的预加载类为内部类,则确定当前的预加载类所属的宿主类的加载线程;
类加载单元,用于若当前的预加载类为内部类,则在当前的预加载类所属的宿主类加载完之后,通过所述线程确定单元确定出的加载线程加载当前的预加载类。
7.根据权利要求6所述的装置,其特征在于,所述线程确定单元还用于若当前的预加载类为宿主类,则确定出该宿主类的加载线程;以及
所述类加载单元还用于确定当前的预加载类为宿主类时,通过所述线程确定单元确定出的加载线程加载当前的预加载类。
8.根据权利要求6或7所述的装置,其特征在于,所述类检测单元具体用于按照预设的解析格式,解析当前的预加载类,以获取其在内部类位置上对应记录的内容;检测当前的预加载类在内部类位置上对应记录的内容是否为空;若是,则确定当前的预加载类为宿主类;否则,确定当前的预加载类是内部类。
9.根据权利要求8所述的装置,其特征在于,所述类解析单元具体用于若当前的预加载类为内部类,则按照预设的解析格式,解析当前的预加载类,以获取其在宿主类位置上对应记录的内容;将获取的内容确定为当前的预加载类所属的宿主类。
10.根据权利要求6或7所述的装置,其特征在于,
所述线程确定单元具体用于查找出当前空闲的线程,并确定为宿主类的加载线程;或将宿主类所对应的预设的线程确定为宿主类的加载线程;或将当前加载宿主类的线程确定为宿主类的加载线程。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610399093.9A CN106095499A (zh) | 2016-06-07 | 2016-06-07 | 嵌入式系统启动优化方法及装置 |
US15/388,235 US10303490B2 (en) | 2016-06-07 | 2016-12-22 | Apparatus and method for optimizing startup of embedded system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610399093.9A CN106095499A (zh) | 2016-06-07 | 2016-06-07 | 嵌入式系统启动优化方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106095499A true CN106095499A (zh) | 2016-11-09 |
Family
ID=57227417
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610399093.9A Pending CN106095499A (zh) | 2016-06-07 | 2016-06-07 | 嵌入式系统启动优化方法及装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10303490B2 (zh) |
CN (1) | CN106095499A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107193610A (zh) * | 2017-05-31 | 2017-09-22 | 广东欧珀移动通信有限公司 | 一种动态库的加载方法、装置、终端设备及存储介质 |
CN108052524A (zh) * | 2017-11-07 | 2018-05-18 | 清华大学 | 文件系统元数据的扫描方法和系统 |
CN112947927A (zh) * | 2019-11-22 | 2021-06-11 | 华为技术有限公司 | 应用程序运行方法、装置、终端设备及介质 |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107291495A (zh) * | 2017-06-01 | 2017-10-24 | 努比亚技术有限公司 | 一种共享资源加载方法、终端及计算机可读存储介质 |
KR102372644B1 (ko) * | 2017-08-23 | 2022-03-17 | 삼성전자주식회사 | 운영 체제의 운용 방법 및 이를 지원하는 전자 장치 |
CN109062625B (zh) * | 2018-06-21 | 2021-11-16 | 北京小米移动软件有限公司 | 应用程序加载的方法、装置及可读存储介质 |
US11194591B2 (en) | 2019-01-23 | 2021-12-07 | Salesforce.Com, Inc. | Scalable software resource loader |
US10747551B2 (en) | 2019-01-23 | 2020-08-18 | Salesforce.Com, Inc. | Software application optimization |
US10802944B2 (en) | 2019-01-23 | 2020-10-13 | Salesforce.Com, Inc. | Dynamically maintaining alarm thresholds for software application performance management |
US10922095B2 (en) * | 2019-04-15 | 2021-02-16 | Salesforce.Com, Inc. | Software application performance regression analysis |
US10922062B2 (en) | 2019-04-15 | 2021-02-16 | Salesforce.Com, Inc. | Software application optimization |
CN111078308B (zh) * | 2019-10-18 | 2023-12-15 | 北京奇艺世纪科技有限公司 | 类的自动加载方法、装置、电子设备及存储介质 |
CN112395015A (zh) * | 2020-11-18 | 2021-02-23 | 珠海全志科技股份有限公司 | 基于Android系统加速开机的优化方法及装置 |
CN117687769B (zh) * | 2023-06-02 | 2024-08-30 | 荣耀终端有限公司 | 一种内存修复清理方法及相关设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104598254A (zh) * | 2015-02-17 | 2015-05-06 | 福州瑞芯微电子有限公司 | 一种安卓系统快速开机的方法及装置 |
CN105511874A (zh) * | 2015-12-02 | 2016-04-20 | 海信集团有限公司 | 嵌入式系统启动方法和智能终端 |
CN105549958A (zh) * | 2015-12-02 | 2016-05-04 | 海信集团有限公司 | 嵌入式系统启动方法和智能终端 |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6571388B1 (en) * | 1999-03-09 | 2003-05-27 | Hewlett-Packard Development Company, L.P. | Building a custom software environment including pre-loaded classes |
US6952756B1 (en) * | 2001-05-08 | 2005-10-04 | Lewiz Communications | Method and apparatus for speculative loading of a memory |
EP2290531A3 (en) * | 2001-07-26 | 2013-04-10 | IRiSE | System and process for gathering, recording and validating requirements for computer applications |
US9170812B2 (en) * | 2002-03-21 | 2015-10-27 | Pact Xpp Technologies Ag | Data processing system having integrated pipelined array data processor |
EP1634182A2 (en) * | 2003-06-17 | 2006-03-15 | PACT XPP Technologies AG | Data processing device and method |
US20070208868A1 (en) * | 2006-03-03 | 2007-09-06 | Kidd John T | Electronic Communication Relationship Management System And Methods For Using The Same |
US8266692B2 (en) * | 2006-07-05 | 2012-09-11 | Bby Solutions, Inc. | Malware automated removal system and method |
US9477495B2 (en) * | 2006-08-17 | 2016-10-25 | International Business Machines Corporation | Conservative class preloading for real time Java execution |
US7730289B2 (en) * | 2007-09-27 | 2010-06-01 | Faraday Technology Corp. | Method for preloading data in a CPU pipeline |
US8166468B2 (en) * | 2007-11-30 | 2012-04-24 | International Business Machines Corporation | Refractor inner class with object-oriented program optimizer tool for reduced footprint and faster application start |
JP2011076232A (ja) * | 2009-09-29 | 2011-04-14 | Fujitsu Ltd | 演算処理装置,半導体集積回路および演算処理方法 |
JP5598554B2 (ja) * | 2011-01-25 | 2014-10-01 | 富士通株式会社 | システム、およびデータロード方法 |
US20130212334A1 (en) * | 2012-02-09 | 2013-08-15 | Qualcomm Incorporated | Determining Optimal Preload Distance at Runtime |
US9411617B2 (en) * | 2013-10-03 | 2016-08-09 | ZeroTurnaround AS | System and method for matching synthetically generated inner classes and methods |
US9286085B2 (en) * | 2014-06-27 | 2016-03-15 | International Business Machines Corporation | Correlating class loader objects across execution environments |
US9870237B2 (en) * | 2014-10-14 | 2018-01-16 | Oracle International Corporation | System and method for supporting distributed class loading in a virtual machine (VM) |
US9928058B1 (en) * | 2014-10-28 | 2018-03-27 | Amazon Technologies, Inc. | Optimized class loading |
CN105701113B (zh) * | 2014-11-27 | 2019-04-09 | 国际商业机器公司 | 用于优化网页预加载的方法和设备 |
US10001978B2 (en) * | 2015-11-11 | 2018-06-19 | Oracle International Corporation | Type inference optimization |
US10191753B2 (en) * | 2016-03-30 | 2019-01-29 | Oracle International Corporation | Generating verification metadata and verifying a runtime type based on verification metadata |
US10394528B2 (en) * | 2016-03-30 | 2019-08-27 | Oracle International Corporation | Returning a runtime type loaded from an archive in a module system |
-
2016
- 2016-06-07 CN CN201610399093.9A patent/CN106095499A/zh active Pending
- 2016-12-22 US US15/388,235 patent/US10303490B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104598254A (zh) * | 2015-02-17 | 2015-05-06 | 福州瑞芯微电子有限公司 | 一种安卓系统快速开机的方法及装置 |
CN105511874A (zh) * | 2015-12-02 | 2016-04-20 | 海信集团有限公司 | 嵌入式系统启动方法和智能终端 |
CN105549958A (zh) * | 2015-12-02 | 2016-05-04 | 海信集团有限公司 | 嵌入式系统启动方法和智能终端 |
Non-Patent Citations (1)
Title |
---|
杨磊等: "简述一下内部类的实质是什么", 《JAVA程序员面试宝典》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107193610A (zh) * | 2017-05-31 | 2017-09-22 | 广东欧珀移动通信有限公司 | 一种动态库的加载方法、装置、终端设备及存储介质 |
CN108052524A (zh) * | 2017-11-07 | 2018-05-18 | 清华大学 | 文件系统元数据的扫描方法和系统 |
CN108052524B (zh) * | 2017-11-07 | 2020-05-22 | 清华大学 | 面向电镜数据存储系统的文件元数据获取方法与系统 |
CN112947927A (zh) * | 2019-11-22 | 2021-06-11 | 华为技术有限公司 | 应用程序运行方法、装置、终端设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
US10303490B2 (en) | 2019-05-28 |
US20170132026A1 (en) | 2017-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106095499A (zh) | 嵌入式系统启动优化方法及装置 | |
US8626786B2 (en) | Dynamic language checking | |
CN105511874A (zh) | 嵌入式系统启动方法和智能终端 | |
US7406592B1 (en) | Method, system, and apparatus for efficient evaluation of boolean expressions | |
US20180219972A1 (en) | Joint servicing of software packages | |
KR101099337B1 (ko) | 커널 모드 쉬밍을 위한 드라이버 특정 컨텍스트 | |
US8671416B2 (en) | Dynamic service discovery | |
US20110246617A1 (en) | Virtual Application Extension Points | |
CN105549958A (zh) | 嵌入式系统启动方法和智能终端 | |
US9274804B2 (en) | Overlapped boot task fetches and boot task execution to reduce boot time in an electrical device | |
CN100353320C (zh) | 引导过程 | |
CN102830959B (zh) | 一种嵌入式浏览器接口动态扩展方法及系统 | |
KR20090031669A (ko) | 소프트웨어 애플리케이션을 신규 버전의 소프트웨어 애플리케이션으로 점진적으로 업그레이드하기 위한 방법, 기계 판독가능 저장 매체를 포함하는 제품 및 장치 | |
CN111813385B (zh) | 一种基于Web应用的页面插件化方法、装置及设备 | |
CN101571809A (zh) | 一种插件注册的实现方法及其装置 | |
US20120089825A1 (en) | Apparatus and method for generating a boot image that is adjustable in size | |
CN111796860A (zh) | 微前端方案实现方法及装置 | |
US11392391B2 (en) | Selectively updating a bios image | |
CN101751263A (zh) | 动态定制启动内核的测试方法 | |
CN113296740A (zh) | 一种服务对象的处理方法、装置、设备和机器可读介质 | |
US8276141B2 (en) | Selection of transaction managers based on transaction metadata | |
CN111160029A (zh) | 信息的处理方法、装置、电子设备及计算机可读存储介质 | |
CN113254089B (zh) | 系统引导方式修正方法、装置、设备及存储介质 | |
US7861297B2 (en) | Reducing security threats from untrusted code | |
CN112256351B (zh) | Feign组件的实现方法、微服务调用方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20161109 |