首页 / 专利库 / 电脑零配件 / 计算机系统 / 软件 / 系统软件 / 操作系统 / 识别android系统下应用程序启动阶段的方法

识别android系统下应用程序启动阶段的方法

阅读:16发布:2024-01-10

专利汇可以提供识别android系统下应用程序启动阶段的方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种识别android系统下应用程序启动阶段的方法,包括android系统运行时获取应用程序连续若干个统计周期内的物理内存分配数量,根据物理内存分配数量大于预定 阈值 的统计周期的数量占所有统计周期的比例来判断应用程序是否处于启动阶段;其中,当物理内存分配数量大于预定阈值的统计周期的数量占所有统计周期的比例大于等于预设值时,判定应用程序处于启动阶段;否则,则认为应用程序不处于启动阶段。该方法识别错误率相对较低,大部分控制在5%以内。,下面是识别android系统下应用程序启动阶段的方法专利的具体信息内容。

1.一种识别android系统下应用程序启动阶段的方法,其特征在于所述方法包括android系统运行时获取应用程序连续3 10个统计周期内的物理内存分配数量,根据物理~
内存分配数量大于预定阈值的统计周期的数量占所有统计周期的比例来判断应用程序是否处于启动阶段;其中,
当物理内存分配数量大于预定阈值的统计周期的数量占所有统计周期的比例大于等于预设值时,判定应用程序处于启动阶段;否则,则认为应用程序处于非启动阶段;所述预定阈值为40 60个物理页,预设值为50 100%,统计周期为连续两次调用CPU主频调节器(CPU ~ ~
frequency governor)进行CPU频率调节之间的时间段;
所述方法需针对垃圾回收机制特殊处理,在统计周期内android系统先对当前进程进行判断,如果当前进程是垃圾回收进程,则不进行物理内存分配数量的统计;否则进行物理内存分配数量的统计。
2.根据权利要求1所述的方法,其特征在于所述方法中获取的所有统计周期的数量为5个。
3.根据权利要求1所述的方法,其特征在于所述方法中CPU主频调节器选自按需调节器(ondemand)、性能调节器(performance)、节约电能调节器(powersave)、用户自定义调节器(userspace)、传统调节器(conservative)。
4.根据权利要求1所述的方法,其特征在于所述方法中所述预定阈值为50个物理页。
5.根据权利要求1所述的方法,其特征在于所述方法中所述预设值为60%。
6.根据权利要求1所述的方法,其特征在于所述方法具体按照如下步骤进行:
(1)android系统运行时获取应用程序连续若干个统计周期内的物理内存分配数量,根据物理内存分配数量大于预定阈值的统计周期的数量占所有统计周期的比例来判断应用程序是否处于启动阶段;
(2)继续步骤(1)获取应用程序连续若干个统计周期内的物理内存分配数量,根据物理内存分配数量大于预定阈值的统计周期的数量占所有统计周期的比例来判断应用程序是否处于启动阶段;依次循环。
7.根据权利要求1所述的方法,其特征在于所述方法中物理内存分配数量的统计方法是采用操作系统内核中__alloc_pages_nodemask()函数,并在该函数中定义全局变量nr_pages_alloc用于统计系统中内存请求的数量并在该函数中使用该全局变量进行累加即可获得统计周期内系统接受的物理内存请求的数量。
8.一种降低android系统智能设备功耗的方法,其特征在于所述方法包括按照权利要求1 7任意一项所述的方法识别应用程序的启动阶段;根据识别的结果对内存分配策略或~
CPU频率和电压进行调整的步骤。

说明书全文

识别android系统下应用程序启动阶段的方法

技术领域

[0001] 本发明属于计算机内存优化技术领域,具体的是一种识别android系统下应用程序启动阶段的方法。

背景技术

[0002] 随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序。Android系统对每个软件所能使用的RAM空间进行了限制(如:Nexus one对每个软件的内存限制是24M),同时Java语言本身比较消耗内存,dalvik虚拟机也要占用一定的内存空间,所以合理使用内存是应用程序开发过程中一项比较重要的事情。
[0003] 然而现在Linux的物理内存是较为离散的。对于内核的内存需求,Linux内存管理系统倾向于从低物理地址的内存区分配;而对于用户进程的内存需求,则倾向于从高物理地址的内存区分配。并且随着系统中进程的不断创建和消亡,加剧了物理内存的碎片问题。应用程序的启动、运行到退出这三个阶段伴随着应用程序的整个生命周期,其不同阶段对应的内存需求的不同变化。监测以及准确判断应用程序生命周期中的不同阶段,一方面可以针对性的调整内存分配策略来优化应用程序;另一方面,可借助于调频机制加速应用程序启动。本发明由此而来。

发明内容

[0004] 本发明的目的是提供一种识别android系统下应用程序启动阶段的方法,解决了现有技术中应用程序没有系统的进行监测,无法根据应用程序的内存需求规律针对性的进行应用程序优化等技术问题。
[0005] 为了解决现有技术中的这些问题,本发明提供的技术方案如下:
[0006] 一种识别android系统下应用程序启动阶段的方法,其特征在于所述方法包括android系统运行时获取应用程序连续若干个统计周期内的物理内存分配数量,根据物理内存分配数量大于预定阈值的统计周期的数量占所有统计周期的比例来判断应用程序是否处于启动阶段;其中,
[0007] 当物理内存分配数量大于预定阈值的统计周期的数量占所有统计周期的比例大于等于预设值时,判定应用程序处于启动阶段;否则,则认为应用 程序不处于启动阶段。
[0008] 优选的技术方案中,所述方法中所述获取的所有统计周期的数量为3~10个;统计周期为连续两次调用CPU frequency governor进行CPU频率调节之间的时间段;优选的,所述获取的所有统计周期的数量为5个。
[0009] 优选的技术方案中,所述方法中CPU主频调节器选自按需调节器(ondemand)、性能调节器(performance)、节约电能调节器(powersave)、用户自定义调节器(userspace)、传统调节器(conservative)。在linux系统中cpufreq是一个动态调整cpu频率的模,系统启动时生成一个文件夹/sys/devices/system/cpu/cpu0/cpufreq/,其中scaling_min_freq代表最低频率,scaling_max_freq代表最高频率,scalin_governor代表cpu频率调整模式,用它来控制CPU频率。
[0010] cpu频率调整模式根据CPU主频调节算法的不同对CPU的频率和电压进行调整。大致有以下几种:1)performance:该算法只注重效率,将CPU频率固定工作在其支持的最高运行频率上,而不动态调节。2)powersave:将CPU频率设置为最低,即所谓“省电”模式,CPU会固定工作在其支持的最低运行频率上。因此这两种调节器都属于静态调节器,即在使用它们时CPU的运行频率不会根据系统运行时负载的变化动态作出调整。这两种调节器对应的是两种极端的应用场景,使用performance governor是对系统高性能的最大追求,而使用powersave governor则是对系统低功耗的最大追求。3)Userspace:最早的cpufreq子系统通过userspace governor为用户提供了这种灵活性。系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU运行频率使用。该模式可以通过手动编辑配置文件进行配置。4)ondemand是按需快速动态调整CPU频率,一旦CPU利用达到足够多的利用率,则立即达到最大频率运行;如果低于某个利用率,则缓慢降低到最低支持频率运行,这样保持CPU利用率一直控制在70-80%。userspace是内核态的检测,用户态调整,效率低。而ondemand是完全在内核态下工作并且能够以更加细粒度的时间间隔对系统负载情况进行采样分析的governor。ondemand governor监测到系统负载超过up_threshold所设定的百分比时,说明用户当前需要CPU提供更强大的处理能力,因此ondemand governor会将CPU设置在最高频率上运 行。但是当ondemand governor监测到系统负载下降,可以降低CPU的运行频率时,ondemand governor的最初实现是在可选的频率范围内调低至下一个可用频率,例如CPU支持三个可选频率,分别为1.67GHz、1.33GHz和1GHz,如果CPU运行在1.67GHz时ondemand governor发现可以降低运行频率,那么1.33GHz将被选作降频的目标频率。5)conservative,与ondemand不同,平滑地调整CPU频率,频率的升降是渐变式的,会自动在频率上下限调整,与ondemand的区别在于它会按需分配频率,而不是一味追求最高频率。
[0011] 优选的技术方案中,所述方法中所述预定阈值为40~60个物理页;优选的,所述预定阈值为50个物理页。
[0012] 优选的技术方案中,所述方法中所述预设值为50~100%;优选的,所述预设值为60%。
[0013] 优选的技术方案中,所述方法具体按照如下步骤进行:
[0014] (1)android系统运行时获取应用程序连续若干个统计周期内的物理内存分配数量,根据物理内存分配数量大于预定阈值的统计周期的数量占所有统计周期的比例来判断应用程序是否处于启动阶段;
[0015] (2)继续步骤(1)获取应用程序连续若干个统计周期内的物理内存分配数量,根据物理内存分配数量大于预定阈值的统计周期的数量占所有统计周期的比例来判断应用程序是否处于启动阶段;依次循环。
[0016] 优选的技术方案中,所述方法中物理内存分配数量的统计方法是采用__alloc_pages_nodemask()函数统计系统中内存请求的数量并在该函数中使用该变量进行累加即可获得统计周期内系统接受的物理内存请求的数量。
[0017] 优选的技术方案中,所述方法中当存在垃圾回收机制时,在统计周期内android系统先对当前进程进行判断,如果当前进程是垃圾回收进程,则不进行物理内存分配数量的统计;否则进行物理内存分配数量的统计。
[0018] 本发明的另一目的在于提供一种降低android系统智能设备功耗的方法,其特征在于所述方法包括按照前面所述的方法识别应用程序的启动阶段;根据识别的结果对内存分配策略和CPU频率和电压进行调整的步骤。
[0019] 对Android应用程序启动阶段进行辨识可以作为很多对Android功耗优化的基础之一。应用程序生命周期中不同的阶段有不同的特征(比如内存 操作的行为、CPU使用的行为等),根据不同阶段间各自的特征进行功耗优化可以更有效地提升优化效果,识别应用程序的启动阶段和非启动阶段正式这类优化方案的基础。
[0020] 从内存需求量的度,可以将应用程序的生命周期划分为三个阶段:对内存需求的爆发期、对内存需求的稳定期以及对内存需求的骤降期。而这三个阶段分别对应应用程序的启动、运行和退出三个阶段(如图1所示)。因此,可以依据“应用程序启动过程中对内存的需求存在‘爆发式’增长”这一性质将应用程序的启动阶段同正常运行阶段区别开来。如果某一时段应用程序大量请求分配内存,则可以判定为此时某一应用程序正处于启动阶段。
[0021] 为了识别应用程序的启动阶段,可以对内核中内存分配函数进行监控,对某一时段内存分配请求数量进行统计,从而判断系统中是否有应用程序正处于启动阶段。
[0022] 本发明识别应用程序启动过程的方法主要通过以下技术问题的解决来获得的:(1)根据Linux内存管理系统正确统计应用程序对物理内存的请求数量;(2)通过对Android系统中的垃圾回收算法进行分析,排除GC进程对应用程序启动过程辨识的干扰;(3)使用平滑处理的方法保证应用程序启动阶段辨识的正确性。
[0023] 以下将对应用程序启动阶段的辨识过程进行详细描述:
[0024] (1)Linux内存管理系统
[0025] Linux操作系统采用虚拟内存管理技术,使得每个进程都有各自互不干涉的进程地址空间。该空间是块大小为4G的线性虚拟空间,用户所看到和接触到的都是该虚拟内存地址,无法看到实际的物理内存地址。
[0026] 在Linux系统中,应用程序对内存的请求分为两个步骤。其中第一步是申请虚拟内存。创建进程fork()、程序载入execve()、映射文件mmap()、动态内存分配malloc()/brk()等进程相关操作都需要分配内存给进程。不过这时进程申请和获得的还不是实际内存,而是虚拟内存,准确的说是“内存区域”。进程对内存区域的分配最终都会归结到do_mmap()函数上来(例外brk()调用被单独以系统调用实现,不用do_mmap()),内核使用do_mmap()函数创建一个新的线性地址区间。这里所说的内存区域指的是一段具有相同访问权限的虚拟地址空间,在内核中由数据结构vm_area_struct描述。而 申请虚拟内存的工作就是在“进程内存描述”链表中扩展某个已存在的内存区域vm_area_struct所描述的虚拟地址空间或者创建一个新的内存区域。内存区域和进程间的关系以及内存区域间的联系可由图2描述。vm_area_struct是描述进程地址空间的基本管理单元,对于一个进程来说往往需要多个内存区域来描述它的虚拟空间,vm_area_struct结构以链表形式链接。同样,释放一个内存区域也应使用函数do_ummap(),它会销毁对应的内存区域。
[0027] 第二步是分配实际物理内存。当进程需要内存时,从内核获得的仅仅是虚拟的内存区域,而不是实际的物理地址,进程并没有获得物理内存,获得的仅仅是对一个新的线性地址区间的使用权。实际的物理内存只有当进程真的去访问新获取的虚拟地址时,才会由“请求页机制”产生“缺页”异常,从而进入分配实际页面的例程。该异常是虚拟内存机制赖以存在的基本保证——它会告诉内核去真正为进程分配物理页,并建立对应的页表,这之后虚拟地址才实实在在地映射到了系统的物理内存上。这种请求页机制把页面的分配推迟到不能再推迟为止,并不急于把所有的事情都一次做完。这是利用了内存访问的“局部性原理”,请求页带来的好处是节约了空闲内存,提高了系统的吞吐率。当系统由“缺页异常”触发分配实际页面的例程后,该例程最终调用__alloc_pages_nodemask(gfp_t gfp_mask,unsigned int order,struct zonelist*zonelist,nodemask_t*nodemask)(mm/page_alloc.c)函数进行实际物理内存的分配。该函数通过传入的参数order获知请求的内存数量并依此从物理内存分配相应的页面。
[0028] (2)内存分配请求数量的统计
[0029] 监控__alloc_pages_nodemask函数的调用情况可以实现对系统中内存请求状况进行统计。因此,只要在系统中定义一个全局变量nr_pages_alloc用于统计系统中内存请求的数量并在该函数中使用该变量进行累加即可获得某一时段内系统接受的物理内存请求的数量。具体可以修改linux系统的mm/page_alloc.c代码来实现,例如:
[0030] struct page*
[0031] __alloc_pages_nodemask(gfp_t gfp_mask,unsigned int order,[0032] struct zonelist*zonelist,nodemask_t*nodemask)
[0033] {
[0034] enum zone_type high_zoneidx=gfp_zone(gfp_mask);
[0035] struct zone*preferred_zone;
[0036] struct page*page=NULL;
[0037] int migratetype=allocflags_to_migratetype(gfp_mask);
[0038] unsigned int cpuset_mems_cookie;
[0039] ……
[0040] nr_pages_alloc+=(1<
[0041] ……
[0042] return page;
[0043] }
[0044] 然而,该方法没有考虑到linux系统存在垃圾回收机制而容易造成错误的判断。如垃圾回收系统中将进程中存活的对象迁移聚集到另一块内存中时会产生内存请求的波动
[0045] GC线程,即垃圾回收线程,是由Java虚拟机创建的一个定时运行的线程,该线程的工作是定时清理系统中不在使用而又未明确释放的内存,将其释放回系统的内存池中供其他进程使用。常见的垃圾回收算法有引用计数法(Reference Counting)、标注并清理(Mark and Sweep GC)、拷贝(Copying GC)和逐代回收(Generational GC)等算法,其中Android系统采用的是标注并删除和拷贝GC,并不是大多数JVM实现里采用的逐代回收算法。
[0046] 拷贝GC算法是一种垃圾回收并消除碎片的算法。该算法的思想是当垃圾回收线程运行时,将进程中存活的对象迁移聚集到另一块内存中,然后回收旧的整块内存。具体实现方式如下:
[0047] GC内存堆实际上分成乒(ping)和乓(pong)两部分。一开始,所有的内存分配请求都有乒(ping)部分满足,其维护“下个对象分配的起始位置指针,分配内存仅仅就是操作下这个指针而已,当乒(ping)的内存快用完时,采用标注(Mark)算法识别出存活的对象,如图2所示,并将它们拷贝到乓(pong)部分。后续的内存分配请求都在乓(pong)部分完成,如图3。而乓(pong)里的内存用完后,再切换回乒(ping)部分,使用内存就跟打乒乓球一样。
[0048] 如图3所示,为了使内存得到充分的利用,当存活的对象被迁移到乓部分以后,乒部分的物理内存被释放回系统供其他进程使用。所以,当下一次由乓(pong)部分向乒(ping)部分迁移时会导致缺页中断以触发内存页的分配,从而调用上文中提到的__alloc_pages_nodemask函数从“伙伴系统”中分配物理页面。虽然GC线程会导致的物理页面的分配请求,但是同时它将紧跟着释放大量的页面(乓部分),所以实际上GC线程的运行不是意味着当前进程“大量消耗内存”,相反,从总体结果来看它实际上会使得当前进程的实际内存拥有量有所下降。所以,GC线程对物理内存的请求量不应该作为应用程序对内存请求的标志,然而,如果单纯依靠对应用程序申请内存函数的监测,GC线程的标注并删除和拷贝算法容易造成一种当前进程正在大量消耗内存的“假象”,影响对应用程序启动阶段的识别。
[0049] 所以,在对__alloc_pages_nodemask函数进行监测时,应该排除GC线程对统计结果的干扰,避免GC线程造成的“假象”影响对应用程序启动的识别。所以,最终的Android系统内存分配数量统计方法可以修改mm/page_alloc.c:
[0050] struct page*
[0051] __alloc_pages_nodemask(gfp_t gfp_mask,unsigned int order,struct zonelist*zonelist,nodemask_t*nodemask)
[0052] {
[0053] enum zone_type high_zoneidx=gfp_zone(gfp_mask);
[0054] struct zone*preferred_zone;
[0055] struct page*page=NULL;
[0056] int migratetype=allocflags_to_migratetype(gfp_mask);
[0057] unsigned int cpuset_mems_cookie;
[0058] ……
[0059] if(strncmp(current->comm,“GC”,2)!=0)
[0060] nr_pages_alloc+=(1<
[0061] ……
[0062] return page;
[0063] }
[0064] (3)应用程序启动阶段识别算法
[0065] CPU frequency governor频率调整的算法有很多种,如conservative、ondemand、userspace、powersave和performance等。governor的作用是:检测系统的负载状况,然后根据当前的负载,选择出某个可供使用的工作频率,然后把该工作频率传递给cpufreq_driver,完成频率的动态调节。ondemand策略的主要思想是:只要cpu的负载超过某一个值,cpu的频率会立刻提升至最高,然后再根据实际情况降到合适的平。当选择userspace作为调频governor时,通过scaling_setspeed手工设置需要的频率。powersave则简单地使用最低的工作频率进行运行,而performance则一直选择最高的频率进行运行。
[0066] 应用程序启动阶段识别主要是依靠Android系统内存请求的统计结果。本发明惊奇的发现,采用连续两次调用CPU frequency governor(一般采用Ondemand算法进行调节)进行CPU频率调节之间的时间段作为统计周期(大约为100ms),则应用程序在启动阶段在大多数情况下内存分配的数量都维持在一个较高的水平,只有少数几个统计周期内内存分配数量比较少;相反,当应用程序启动完成以后,几乎所有统计周期内内存分配数量都很少(大都维持在10页以内),只有少数几个周期会出现内存分配很多的情况。
[0067] 基于以上结果,本发明人设计了一个能有效识别应用程序启动阶段的算法。该算法的思想为,如果在连续五个统计周期内至少有三个统计周期内内存分配数量大于或等于一个阈值(50个物理页)时,判定当前为应用程序启动阶段;否则不是应用程序启动阶段。
[0068] 应用程序启动阶段的识别算法可有如下描述:
[0069] global int nr_pages_alloc;
[0070] static int allocated_pages[5];
[0071] static int array_pointer;
[0072] static int last_startup;
[0073] function app_startup_judgement
[0074] allocated_pages[array_pointer]=nr_pages_alloc;
[0075] nr_pages_alloc=0;
[0076] array_pointer=(array_pointer+1)%5;
[0077] for i=0:4
[0078] if(allocated_pages[i]>50)n++;
[0079] end
[0080] if n>=3//本次判定为应用启动阶段
[0081] then
[0082] return STARTUP;
[0083] else
[0084] reutnr NOT_STARTUP;
[0085] endif
[0086] end
[0087] CPU主频调节器采用的调频算法是在Android已有的调频算法,即目前使用最多的ondemand算法。ondemand算法的调频的流程图如图5。根据图5我们来详细分析一下Android底层的Linux自带调频算法ondemand算法的工作原理。
[0088] (1)ondemand算法的调频依据为CPU负载,即系统负载或者CPU利用率,负载的计算方法为过去一段时间内idle时间占CPU总时间的比例。根据比例的不同ondemand进行不同层次的调频。核心目标是保持CPU利用率在70%-80%。
[0089] (2)ondemand算法根据CPU负载进行调频,其主要特点是急速升频,缓慢降频。当当前负载大于90,即CPU利用率超过90%时,ondemand将频率调节到最大值。在本平台下即为1.2G。若CPU利用率在70%-80%之间,则不进行操作。若CPU利用率小于70%,如果当前频率小于ondemand支持的最低频率,在本平台下为200M,那么则将频率提升到200M。否则ondemand将缓慢的调低CPU频率。
[0090] 相对于现有技术中的方案,本发明的优点是:
[0091] 基于内存分配数量进行Android应用程序启动阶段辨识的方法错误率相对较低,大部分控制在5%以内;而对非启动阶段辨识的错误率大多数情况下也能控制在10%以内。根据应用程序的启动阶段的特征进行优化可以更有效地提升优化效果。
附图说明
[0092] 下面结合附图及实施例对本发明作进一步描述:
[0093] 图1是应用程序生命周期内物理内存需求量变化趋势图
[0094] 图2为是Linux内存管理结构图。
[0095] 图3为垃圾回收算法初始状态示意图;
[0096] 图4为垃圾回收算法结束状态示意图;
[0097] 图5为ondemand算法的调频的流程图;
[0098] 图6为基于内存分配数量的Android应用程序启动阶段的识别方法识别结果。

具体实施方式

[0099] 以下结合具体实施例对上述方案做进一步说明。应理解,这些实施例是用于说明本发明而不限制本发明的范围。实施例中采用的实施条件可以根据具体系统的条件做进一步调整,未注明的实施条件通常为常规实验中的条件。
[0100] 实施例
[0101] 实验目的
[0102] 本实验的目的是测试基于内存分配数量统计的应用程序启动阶段识别算法的有效性。
[0103] 实验平台
[0104] 实验设备:Samsung GALAXY S4(I9500)+秒表(精度:100ms);其中Samsung GALAXY S4(I9500)搭载的是Exynos 5410双四核处理器,包括四颗基于Cortex-A15架构、主频1.6GHz的A15核和四颗基于Cortex-A15架构、主频1.2GHz的A7核,配置2GB的RAM。
[0105] 实验用例
[0106] 我们通过选择启动过程比较长的应用程序作为实验用例来减小认为误差对给实验结果带来的影响。为了给用户带来更好的感官体验,现在的手机游戏画面越来越绚丽,音效越来越丰富。同时为了游戏的运行流畅性,基本上所有的游戏都会在游戏启动时,大量预加载游戏运行过程中所需的各种资源,但这也带来了游戏启动时间长的问题。因此我们选取了一些本身启动时间较长的游戏作为我们的实验用例,如下表所示。
[0107] 表格1应用程序启动过程识别测试用例
[0108]实验用例名称 实验用例类型
AngryBots 游戏
Temple Run魔境仙踪 游戏
Muscle Run 游戏
NBA 2K14 游戏
[0109] 实验方法
[0110] 分别统计应用程序启动过程和应用程序非启动过程中每两次调用Ondemand算法进行频率调节之间系统内存请求的数量,使用离线分析法分别分析算法在启动阶段的误判率和非启动阶段的误判率。其中,启动阶段的误判率P1=启动阶段被判定为非启动阶段的次数/启动阶段调用Ondemand的总次数;非启动阶段的误判率P2=非启动阶段被判定为启动阶段的次数/非启动阶段调用Ondemand的总次数。
[0111] 实验结果
[0112] 如图6所示,从实验结果可以看出,基于内存分配数量的Android应用程序启动阶段辨识错误率相对较低,大部分控制在5%以内;而非启动阶段辨识的错误率大多数情况下也能控制在10%以内。
[0113] 上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人是能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所做的等效变换或修饰,都应涵盖在本发明的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈