CN108052388A - 一种Android中内存回收方法及装置 - Google Patents
一种Android中内存回收方法及装置 Download PDFInfo
- Publication number
- CN108052388A CN108052388A CN201711188102.0A CN201711188102A CN108052388A CN 108052388 A CN108052388 A CN 108052388A CN 201711188102 A CN201711188102 A CN 201711188102A CN 108052388 A CN108052388 A CN 108052388A
- Authority
- CN
- China
- Prior art keywords
- comparative result
- target object
- priority
- size
- memory
- 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/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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced 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/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/5022—Mechanisms to release resources
Abstract
本发明提供一种Android中内存回收方法及装置,所述方法包括:S1,获取目标对象的大小和优先级,将所述目标对象的大小和优先级分别与相应的预设阈值进行比较;S2,根据比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存。本发明通过将所述目标对象的大小和优先级分别与相应的预设阈值进行比较,根据比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存,从而实现对不同大小和优先级的目标对象采用不同的控制策略回收内存,有效避免内存泄漏问题,提升了用户体验。
Description
技术领域
本发明属于内存优化领域,更具体地,涉及一种Android中内存回收方法及装置。
背景技术
在Android开发过程中会使用到对象,因为Android是基于Java语言进行开发的,而Java是一门面向对象的语言。虽然Java虚拟机自带垃圾回收机制,但是依然无法避免内存泄漏问题。
内存泄漏是指系统将堆内存分配给程序使用,由于某些原因导致程序在使用完内存后未及时释放或无法释放内存,导致已经分配的内存无法回收再利用,造成系统内存的浪费。随着程序的运行,系统可分配的内存越来越少,使得程序的运行速度减慢,最终可能导致系统由于没有足够内存而崩溃,造成严重影响。由于导致内存泄漏的原因有很多,对内存泄漏的监测及定位难度较大,从而很难解决内存泄漏的问题。
发明内容
为克服上述内存泄漏的问题或者至少部分地解决上述问题,本发明提供了一种Android中内存回收方法及装置。
根据本发明的第一方面,提供一种Android中内存回收方法,包括:
S1,获取目标对象的大小和优先级,将所述目标对象的大小和优先级分别与相应的预设阈值进行比较;
S2,根据比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存。
具体地,所述步骤S1中获取目标对象的大小的步骤具体包括:
获取系统中的当前剩余内存容量;
调用所述目标对象的构造方法对所述目标对象进行实例化,获取实例化的目标对象;
获取所述目标对象实例化后的剩余内存容量;
使用所述当前剩余内存容量减去所述目标对象实例化后的剩余内存容量,获取所述目标对象的大小。
具体地,获取系统中的当前剩余内存容量和获取所述目标对象实例化后的剩余内存容量的步骤具体包括:
使用运行时类Runtime中的静态方法getRuntime,获取运行时对象;
调用所述运行时对象中的freeMemory方法,获取系统中的当前剩余内存容量和所述目标对象实例化后的剩余内存容量。
具体地,获取所述目标对象实例化后的剩余内存容量的步骤之后还包括:
将所述实例化的目标对象设置为空;
使用系统垃圾回收器对所述实例化的目标对象所占用的内存进行回收处理。
具体地,所述步骤S1中获取目标对象的优先级的步骤具体包括:
定义一个基类,在所述基类中定义一个整型的优先级变量,给所述优先级变量赋值为预设常量;
在所述基类中分别定义获取优先级函数和更改优先级函数,所述目标对象继承所述基类;
调用所述更改优先级函数更改目标对象的优先级;
调用所述获取优先级函数获取所述目标对象的优先级。
具体地,所述步骤S2中的比较结果包括第一比较结果、第二比较结果和第三比较结果中的一种,以及第四比较结果、第五比较结果和第六比较结果中的一种,其中:
所述第一比较结果为所述目标对象的优先级小于第一预设阈值;
所述第二比较结果为所述目标对象的优先级大于或等于所述第一预设阈值,且小于或等于第二预设阈值;
所述第三比较结果为所述目标对象的优先级大于所述第二预设阈值;
所述第四比较结果为所述目标对象的大小大于第三预设阈值;
所述第五比较结果为所述目标对象的大小小于或等于所述第三预设阈值,且大于或等于第四预设阈值;
所述第六比较结果为所述目标对象的大小小于所述第四预设阈值。
具体地,所述步骤S2具体包括:
若所述优先级的比较结果为所述第一比较结果,且所述大小的比较结果为所述第四比较结果或第五比较结果,则将所述目标对象转换为弱引用对象;
当系统中当前剩余内存容量小于第五预设阈值时,使用所述系统垃圾回收器优先回收所述弱引用对象所占用的内存。
具体地,所述步骤S2具体包括:
若所述优先级的比较结果为第一比较结果且所述大小的比较结果为第六比较结果,或者所述优先级的比较结果为第二比较结果且所述大小的比较结果为第四比较结果,或者所述优先级的比较结果为第二比较结果且所述大小的比较结果为第六比较结果,或者所述优先级的比较结果为第三比较结果且所述大小的比较结果为第五比较结果,则使用系统垃圾回收器每隔预设时长对所述目标对象进行监测;
当监测到所述目标对象没有引用关系时,使用所述系统垃圾回收器回收所述目标对象所占用的内存。
具体地,所述步骤S2具体包括:
若所述优先级的比较结果为第二比较结果且所述大小的比较结果为第五比较结果,或者所述优先级的比较结果为第三比较结果且所述大小的比较结果为第四比较结果,或者所述优先级的比较结果为第三比较结果且所述大小的比较结果为第六比较结果,则使用预先创建的线程对所述目标对象中的数据进行检测;
当检测到所述目标对象中的数据为空时,使用所述系统垃圾回收器回收所述目标对象所占用的内存。
根据本发明的第二方面,提供一种Android中内存回收装置,包括:
比较单元,用于获取目标对象的大小和优先级,将所述目标对象的大小和优先级分别与相应地预设阈值进行比较;
回收单元,用于根据比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存。
本发明提供一种Android中内存回收方法及装置,该方法通过将所述目标对象的大小和优先级分别与相应的预设阈值进行比较,根据比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存,从而实现对不同大小和优先级的目标对象采用不同的控制策略回收内存,有效避免内存泄漏问题,提升了用户体验。
附图说明
图1为本发明实施例提供的Android中内存回收方法整体流程示意图;
图2为本发明实施例提供的Android中内存回收装置整体结构示意图;
图3为本发明实施例提供的Android中内存回收设备整体结构示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
在本发明的一个实施例中提供一种Android中内存回收方法,图1为本发明实施例提供的Android中内存回收方法整体流程示意图,该方法包括:S1,获取目标对象的大小和优先级,将所述目标对象的大小和优先级分别与相应的预设阈值进行比较;S2,根据比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存。
具体地,S1中,所述目标对象为一个Java对象。所述目标对象的大小为所述目标对象在内存中所占用内存的大小。所述目标对象的优先级为预先设定的,用于表示所述目标对象的重要程度,如将所述目标对象的优先级划分成为低、中和高三个档位,在代码层面使用1表示低档位,使用2表示中档位,使用3表示高档位,本实施例中所述优先级不仅限于所述三个档位。将所述目标对象的大小和优先级分别与相应的预设阈值进行比较,所述预设阈值可以为一个,也可以为多个。S2中,根据所述目标对象的大小和优先级的比较结果,获取所述比较结果对应的控制策略,所述控制策略为用于控制对所述目标对象所占用的内存进行回收的方法,不同的比较结果对应的控制策略不同。根据所述比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存。
本实施例通过将所述目标对象的大小和优先级分别与相应的预设阈值进行比较,根据比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存,从而实现对不同大小和优先级的目标对象采用不同的控制策略回收内存,有效避免内存泄漏问题,提升了用户体验。
在上述实施例的基础上,本实施例中所述步骤S1中获取目标对象的大小的步骤具体包括:获取系统中的当前剩余内存容量;调用所述目标对象的构造方法对所述目标对象进行实例化,获取实例化的目标对象;获取所述目标对象实例化后的剩余内存容量;使用所述当前剩余内存容量减去所述目标对象实例化后的剩余内存容量,获取所述目标对象的大小。
具体地,为了获取所述目标对象的大小,首先获取系统中的当前剩余内存容量。然后调用所述目标对象的构造方法对所述目标对象进行实例化。再获取所述目标对象实例化后的剩余内存容量。使用所述当前剩余内存容量减去所述目标对象实例化后的剩余内存容量,获取所述目标对象的大小。本实施例获取到所述目标对象的实际大小,为后续内存回收作铺垫。
在上述实施例的基础上,本实施例中获取系统中的当前剩余内存容量和获取所述目标对象实例化后的剩余内存容量的步骤具体包括:使用运行时类Runtime中的静态方法getRuntime,获取运行时对象;调用所述运行时对象中的freeMemory方法,获取系统中的当前剩余内存容量和所述目标对象实例化后的剩余内存容量。
具体地,首先获取系统的运行时对象runtime,获取runtime对象的方法为Runtimerumtime=Runtime.getRuntime()。通过使用系统中的运行时类Runtime中的静态方法getRuntime,获取系统中的运行时对象rumtime。然后通过调用rumtime对象中的freeMemory方法获取系统中的当前剩余内存容量和所述目标对象实例化后的剩余内存容量。
在上述实施例的基础上,本实施例中获取所述目标对象实例化后的剩余内存容量的步骤之后还包括:将所述实例化的目标对象设置为空;使用系统垃圾回收器对所述实例化的目标对象所占用的内存进行回收处理。
具体地,为了获取所述目标对象的大小,对所述目标对象进行实例化,但实例化的所述目标对象在后续不再使用,为了节约内存,可以对所述目标对象进行及时释放。当获取到所述目标对象实例化后的剩余内存容量之后,将所述实例化的目标对象设置为空,并通知系统垃圾回收器对所述目标对象所占用的内存进行回收处理。
在上述实施例的基础上,本实施例中所述步骤S1中获取目标对象的优先级的步骤具体包括:定义一个基类,在所述基类中定义一个整型的优先级变量,给所述优先级变量赋值为预设常量;在所述基类中分别定义获取优先级函数和更改优先级函数,所述目标对象继承所述基类;调用所述更改优先级函数更改目标对象的优先级;调用所述获取优先级函数获取所述目标对象的优先级。
具体地,所述目标对象的重要程度量化成优先级,根据不同的优先级对应的控制策略对所述目标对象进行不同方式的回收。为了使所述目标对象携带有优先级,定义一个基类,如BaseBean,并且在所述基类中定义一个整形的优先级变量,给所述优先级变量赋值为预设常量,如3,在所述基类中提供一套优先级修改的接口函数,所述接口函数包括定义获取优先级函数getPriority和更改优先级函数setPriority,所述更改优先级函数用于更改目标对象的优先级,所述获取优先级函数用于获取所述目标对象的优先级。所述目标对象继承所述基类BaseBean对象来进行扩展,从而使得所述目标对象本身携带优先级。所述目标对象通过调用所述基类BaseBean中的setPriority函数更改优先级,通过调用所述基类中的getPriority函数获取到优先级。
在上述各实施例的基础上,本实施例中所述步骤S2中的比较结果包括第一比较结果、第二比较结果和第三比较结果中的一种,以及第四比较结果、第五比较结果和第六比较结果中的一种,其中:所述第一比较结果为所述目标对象的优先级小于第一预设阈值;所述第二比较结果为所述目标对象的优先级大于或等于所述第一预设阈值,且小于或等于第二预设阈值;所述第三比较结果为所述目标对象的优先级大于所述第二预设阈值;所述第四比较结果为所述目标对象的大小大于第三预设阈值;所述第五比较结果为所述目标对象的大小小于或等于所述第三预设阈值,且大于或等于第四预设阈值;所述第六比较结果为所述目标对象的大小小于所述第四预设阈值。
具体地,将所述目标对象的大小与第一预设阈值和第二预设阈值进行比较,将比较的三种结果分别作为第一比较结果、第二比较结果和第三比较结果。并同时将所述目标对象的优先级与第三预设阈值和第四预设阈值进行比较,将比较的结果分别作为第四比较结果、第五比较结果和第六比较结果。
在上述实施例的基础上,本实施例中所述步骤S2具体包括:若所述优先级的比较结果为所述第一比较结果,且所述大小的比较结果为所述第四比较结果或第五比较结果,则将所述目标对象转换为弱引用对象;当系统中当前剩余内存容量小于第五预设阈值时,使用所述系统垃圾回收器优先回收所述弱引用对象所占用的内存。
具体地,当所述优先级的比较结果为所述第一比较结果时,即所述目标对象的优先级小于所述第一预设阈值,说明所述目标对象是一个重要程度不高的对象。当所述大小的比较结果为所述第四比较结果或第五比较结果时,说明所述目标对象是一个较大对象,对内存的压力很大。当内存严重不足时,即系统中当前剩余内存容量小于第五预设阈值时,由于所述目标对象所述占用的内存空间过大且重要程度不高,所述目标对象所占用的内存需要被释放。所述第五预设阈值可以为整个内存大小的5%。
具体为给所述目标对象,如B套上一层弱引用,即WeakReference,从而将所述目标对象B转换为弱引用类型WeakReference<B>,所述目标对象B在系统中就被转换为弱引用对象,所述弱引用对象在系统内存资源不足时,系统垃圾回收器会优先回收所述弱引用对象以确保系统的正常运行,避免系统挂掉等问题。
在上述实施例的基础上,本实施例中所述步骤S2具体包括:若所述优先级的比较结果为第一比较结果且所述大小的比较结果为第六比较结果,或者所述优先级的比较结果为第二比较结果且所述大小的比较结果为第四比较结果,或者所述优先级的比较结果为第二比较结果且所述大小的比较结果为第六比较结果,或者所述优先级的比较结果为第三比较结果且所述大小的比较结果为第五比较结果,则使用系统垃圾回收器每隔预设时长对所述目标对象进行监测;当监测到所述目标对象没有引用关系时,使用所述系统垃圾回收器回收所述目标对象所占用的内存。
具体地,所述优先级的比较结果为第一比较结果且所述大小的比较结果为第六比较结果,说明目标对象的优先级虽然高但占用内存小。所述优先级的比较结果为第二比较结果且所述大小的比较结果为第四比较结果,说明所述目标对象的优先级为中且占用内存大。所述优先级的比较结果为第二比较结果且所述大小的比较结果为第六比较结果,说明所述目标对象优先级为中且占用内存小。所述优先级的比较结果为第三比较结果且所述大小的比较结果为第五比较结果,说明优先级高且占用内存居中。上述四种情况造成内存泄漏的风险性不高,也不会给系统带来灾难性的后果,因此正常对所述目标对象进行实例化。但使用系统垃圾回收器每隔预设时长对所述目标对象进行监测,当监测到所述目标对象没有引用关系时,使用所述系统垃圾回收器回收所述目标对象所占用的内存。
在上述实施例的基础上,本实施例中所述步骤S2具体包括:若所述优先级的比较结果为第二比较结果且所述大小的比较结果为第五比较结果,或者所述优先级的比较结果为第三比较结果且所述大小的比较结果为第四比较结果,或者所述优先级的比较结果为第三比较结果且所述大小的比较结果为第六比较结果,则使用预先创建的线程对所述目标对象中的数据进行检测;当检测到所述目标对象中的数据为空时,使用所述系统垃圾回收器回收所述目标对象所占用的内存。
具体地,所述优先级的比较结果为第二比较结果且所述大小的比较结果为第五比较结果,说明目标对象的优先级为中,所占内存居中。所述优先级的比较结果为第三比较结果且所述大小的比较结果为第四比较结果,说明所述目标对象的优先级高,所占内存大。所述优先级的比较结果为第三比较结果且所述大小的比较结果为第六比较结果,说明所述目标对象优先级高,所占内存小,则开启一个独立的线程对所述目标对象中的数据进行监测,监测所述目标对象中的数据是否有效。垃圾回收器仅仅监测所述目标对象的引用关系,当所述目标对象没有引用关系的时候,垃圾回收器会回收所述目标对象,但是当有引用关系但是所述目标对象中的数据为空是,垃圾回收器就无法进行有效处理。本实施例额外开辟了一个线程专门用于检测所述目标对象中的数据,一旦检测到所述目标对象中的数据为空时,立刻将所述对象设置为空,方便垃圾回收器对类型为空的目标对象所占用的内存进行合理回收,有效避免内存泄漏的发生。
在本发明的另一个实施例中提供一种Android中内存回收装置,图2为本发明实施例提供的Android中内存回收装置整体结构示意图,该装置包括比较单元1和回收单元2,其中:
所述比较单元1用于获取目标对象的大小和优先级,将所述目标对象的大小和优先级分别与相应地预设阈值进行比较;所述回收单元2用于根据比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存。
具体地,所述目标对象为一个Java对象。所述目标对象的大小为所述目标对象在内存中所占用内存的大小。所述目标对象的优先级为预先设定的,用于表示所述目标对象的重要程度,如将所述目标对象的优先级划分成为低、中和高三个档位,在代码层面使用1表示低档位,使用2表示中档位,使用3表示高档位,本实施例中所述优先级不仅限于所述三个档位。所述比较单元1将所述目标对象的大小和优先级分别与相应的预设阈值进行比较,所述预设阈值可以为一个,也可以为多个。所述回收单元2根据所述目标对象的大小和优先级的比较结果,获取所述比较结果对应的控制策略,所述控制策略为用于控制对所述目标对象所占用的内存进行回收的方法,不同的比较结果对应的控制策略不同。根据所述比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存。
本实施例通过将所述目标对象的大小和优先级分别与相应的预设阈值进行比较,根据比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存,从而实现对不同大小和优先级的目标对象采用不同的控制策略回收内存,有效避免内存泄漏问题,提升了用户体验。
在上述实施例的基础上,本实施例中所述比较单元具体用于:获取系统中的当前剩余内存容量;调用所述目标对象的构造方法对所述目标对象进行实例化,获取实例化的目标对象;获取所述目标对象实例化后的剩余内存容量;使用所述当前剩余内存容量减去所述目标对象实例化后的剩余内存容量,获取所述目标对象的大小。
在上述实施例的基础上,本实施例中所述比较单元进一步用于:使用运行时类Runtime中的静态方法getRuntime,获取运行时对象;调用所述运行时对象中的freeMemory方法,获取系统中的当前剩余内存容量和所述目标对象实例化后的剩余内存容量。
在上述各实施例的基础上,本实施例中所述比较单元还用于:将所述实例化的目标对象设置为空;使用系统垃圾回收器对所述实例化的目标对象所占用的内存进行回收处理。
在上述各实施例的基础上,本实施例中所述比较单元具体用于:定义一个基类,在所述基类中定义一个整型的优先级变量,给所述优先级变量赋值为预设常量;在所述基类中分别定义获取优先级函数和更改优先级函数,所述目标对象继承所述基类;调用所述更改优先级函数更改目标对象的优先级;调用所述获取优先级函数获取所述目标对象的优先级。
在上述各实施例的基础上,本实施例中所述比较结果包括第一比较结果、第二比较结果和第三比较结果中的一种,以及第四比较结果、第五比较结果和第六比较结果中的一种,其中:
所述第一比较结果为所述目标对象的优先级小于第一预设阈值;所述第二比较结果为所述目标对象的优先级大于或等于所述第一预设阈值,且小于或等于第二预设阈值;所述第三比较结果为所述目标对象的优先级大于所述第二预设阈值;所述第四比较结果为所述目标对象的大小大于第三预设阈值;所述第五比较结果为所述目标对象的大小小于或等于所述第三预设阈值,且大于或等于第四预设阈值;所述第六比较结果为所述目标对象的大小小于所述第四预设阈值。
在上述实施例的基础上,本实施例中所述回收单元具体用于:在所述优先级的比较结果为所述第一比较结果,且所述大小的比较结果为所述第四比较结果或第五比较结果时,将所述目标对象转换为弱引用对象;当系统中当前剩余内存容量小于第五预设阈值时,使用所述系统垃圾回收器优先回收所述弱引用对象所占用的内存。
在上述实施例的基础上,本实施例中所述回收单元具体用于:在所述优先级的比较结果为第一比较结果且所述大小的比较结果为第六比较结果,或者所述优先级的比较结果为第二比较结果且所述大小的比较结果为第四比较结果,或者所述优先级的比较结果为第二比较结果且所述大小的比较结果为第六比较结果,或者所述优先级的比较结果为第三比较结果且所述大小的比较结果为第五比较结果时,使用系统垃圾回收器每隔预设时长对所述目标对象进行监测;当监测到所述目标对象没有引用关系时,使用所述系统垃圾回收器回收所述目标对象所占用的内存。
在上述实施例的基础上,本实施例中所述回收单元具体用于:在所述优先级的比较结果为第二比较结果且所述大小的比较结果为第五比较结果,或者所述优先级的比较结果为第三比较结果且所述大小的比较结果为第四比较结果,或者所述优先级的比较结果为第三比较结果且所述大小的比较结果为第六比较结果时,使用预先创建的线程对所述目标对象中的数据进行检测;当检测到所述目标对象中的数据为空时,使用所述系统垃圾回收器回收所述目标对象所占用的内存。
本实施例提供一种Android中内存回收设备,图3为本发明实施例提供的Android中内存回收设备整体结构示意图,该设备包括:至少一个处理器31、至少一个存储器32和总线33;其中,
所述处理器31和存储器32通过所述总线33完成相互间的通信;
所述存储器32存储有可被所述处理器31执行的程序指令,所述处理器调用所述程序指令能够执行上述各方法实施例所提供的方法,例如包括:S1,获取目标对象的大小和优先级,将所述目标对象的大小和优先级分别与相应的预设阈值进行比较;S2,根据比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存。
本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:S1,获取目标对象的大小和优先级,将所述目标对象的大小和优先级分别与相应的预设阈值进行比较;S2,根据比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的Android中内存回收设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种Android中内存回收方法,其特征在于,包括:
S1,获取目标对象的大小和优先级,将所述目标对象的大小和优先级分别与相应的预设阈值进行比较;
S2,根据比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存。
2.根据权利要求1所述的方法,其特征在于,所述步骤S1中获取目标对象的大小的步骤具体包括:
获取系统中的当前剩余内存容量;
调用所述目标对象的构造方法对所述目标对象进行实例化,获取实例化的目标对象;
获取所述目标对象实例化后的剩余内存容量;
使用所述当前剩余内存容量减去所述目标对象实例化后的剩余内存容量,获取所述目标对象的大小。
3.根据权利要求2所述的方法,其特征在于,获取系统中的当前剩余内存容量和获取所述目标对象实例化后的剩余内存容量的步骤具体包括:
使用运行时类Runtime中的静态方法getRuntime,获取运行时对象;
调用所述运行时对象中的freeMemory方法,获取系统中的当前剩余内存容量和所述目标对象实例化后的剩余内存容量。
4.根据权利要求2所述的方法,其特征在于,获取所述目标对象实例化后的剩余内存容量的步骤之后还包括:
将所述实例化的目标对象设置为空;
使用系统垃圾回收器对所述实例化的目标对象所占用的内存进行回收处理。
5.根据权利要求1所述的方法,其特征在于,所述步骤S1中获取目标对象的优先级的步骤具体包括:
定义一个基类,在所述基类中定义一个整型的优先级变量,给所述优先级变量赋值为预设常量;
在所述基类中分别定义获取优先级函数和更改优先级函数,所述目标对象继承所述基类;
调用所述更改优先级函数更改目标对象的优先级;
调用所述获取优先级函数获取所述目标对象的优先级。
6.根据权利要求1-5任一所述的方法,其特征在于,所述步骤S2中的比较结果包括第一比较结果、第二比较结果和第三比较结果中的一种,以及第四比较结果、第五比较结果和第六比较结果中的一种,其中:
所述第一比较结果为所述目标对象的优先级小于第一预设阈值;
所述第二比较结果为所述目标对象的优先级大于或等于所述第一预设阈值,且小于或等于第二预设阈值;
所述第三比较结果为所述目标对象的优先级大于所述第二预设阈值;
所述第四比较结果为所述目标对象的大小大于第三预设阈值;
所述第五比较结果为所述目标对象的大小小于或等于所述第三预设阈值,且大于或等于第四预设阈值;
所述第六比较结果为所述目标对象的大小小于所述第四预设阈值。
7.根据权利要求6所述的方法,其特征在于,所述步骤S2具体包括:
若所述优先级的比较结果为所述第一比较结果,且所述大小的比较结果为所述第四比较结果或第五比较结果,则将所述目标对象转换为弱引用对象;
当系统中当前剩余内存容量小于第五预设阈值时,使用所述系统垃圾回收器优先回收所述弱引用对象所占用的内存。
8.根据权利要求6所述的方法,其特征在于,所述步骤S2具体包括:
若所述优先级的比较结果为第一比较结果且所述大小的比较结果为第六比较结果,或者所述优先级的比较结果为第二比较结果且所述大小的比较结果为第四比较结果,或者所述优先级的比较结果为第二比较结果且所述大小的比较结果为第六比较结果,或者所述优先级的比较结果为第三比较结果且所述大小的比较结果为第五比较结果,则使用系统垃圾回收器每隔预设时长对所述目标对象进行监测;
当监测到所述目标对象没有引用关系时,使用所述系统垃圾回收器回收所述目标对象所占用的内存。
9.根据权利要求6所述的方法,其特征在于,所述步骤S2具体包括:
若所述优先级的比较结果为第二比较结果且所述大小的比较结果为第五比较结果,或者所述优先级的比较结果为第三比较结果且所述大小的比较结果为第四比较结果,或者所述优先级的比较结果为第三比较结果且所述大小的比较结果为第六比较结果,则使用预先创建的线程对所述目标对象中的数据进行检测;
当检测到所述目标对象中的数据为空时,使用所述系统垃圾回收器回收所述目标对象所占用的内存。
10.一种Android中内存回收装置,其特征在于,包括:
比较单元,用于获取目标对象的大小和优先级,将所述目标对象的大小和优先级分别与相应地预设阈值进行比较;
回收单元,用于根据比较结果对应的控制策略,使用系统垃圾回收器回收所述目标对象所占用的内存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711188102.0A CN108052388A (zh) | 2017-11-24 | 2017-11-24 | 一种Android中内存回收方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711188102.0A CN108052388A (zh) | 2017-11-24 | 2017-11-24 | 一种Android中内存回收方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108052388A true CN108052388A (zh) | 2018-05-18 |
Family
ID=62120135
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711188102.0A Pending CN108052388A (zh) | 2017-11-24 | 2017-11-24 | 一种Android中内存回收方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108052388A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109246177A (zh) * | 2018-07-04 | 2019-01-18 | 武汉斗鱼网络科技有限公司 | Android中异步通信工具设计方法 |
CN109302639A (zh) * | 2018-09-30 | 2019-02-01 | 武汉斗鱼网络科技有限公司 | 一种弹幕消息的分发方法、装置、终端和存储介质 |
CN109614221A (zh) * | 2018-10-30 | 2019-04-12 | 北京技德终端技术有限公司 | 一种实时操作系统的应用框架及其方法 |
CN109857556A (zh) * | 2019-01-15 | 2019-06-07 | Oppo广东移动通信有限公司 | 内存回收方法及装置、存储介质和电子设备 |
CN110362451A (zh) * | 2019-07-17 | 2019-10-22 | 北京小米移动软件有限公司 | 一种监控方法、装置及介质 |
CN110908771A (zh) * | 2019-11-14 | 2020-03-24 | 杭州趣链科技有限公司 | 一种基于java的智能合约的内存管理方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103500121A (zh) * | 2013-09-29 | 2014-01-08 | 深圳Tcl新技术有限公司 | 一种进程管理方法及装置 |
CN105701025A (zh) * | 2015-12-31 | 2016-06-22 | 华为技术有限公司 | 一种内存回收方法及装置 |
US20170212690A1 (en) * | 2016-01-22 | 2017-07-27 | Netapp, Inc. | Recovery from low space condition of an extent store |
CN107220076A (zh) * | 2016-09-27 | 2017-09-29 | 华为技术有限公司 | 一种内存回收方法及装置 |
-
2017
- 2017-11-24 CN CN201711188102.0A patent/CN108052388A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103500121A (zh) * | 2013-09-29 | 2014-01-08 | 深圳Tcl新技术有限公司 | 一种进程管理方法及装置 |
CN105701025A (zh) * | 2015-12-31 | 2016-06-22 | 华为技术有限公司 | 一种内存回收方法及装置 |
US20170212690A1 (en) * | 2016-01-22 | 2017-07-27 | Netapp, Inc. | Recovery from low space condition of an extent store |
CN107220076A (zh) * | 2016-09-27 | 2017-09-29 | 华为技术有限公司 | 一种内存回收方法及装置 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109246177A (zh) * | 2018-07-04 | 2019-01-18 | 武汉斗鱼网络科技有限公司 | Android中异步通信工具设计方法 |
CN109246177B (zh) * | 2018-07-04 | 2021-04-27 | 武汉斗鱼网络科技有限公司 | Android中异步通信工具设计方法 |
CN109302639A (zh) * | 2018-09-30 | 2019-02-01 | 武汉斗鱼网络科技有限公司 | 一种弹幕消息的分发方法、装置、终端和存储介质 |
CN109614221A (zh) * | 2018-10-30 | 2019-04-12 | 北京技德终端技术有限公司 | 一种实时操作系统的应用框架及其方法 |
CN109614221B (zh) * | 2018-10-30 | 2024-01-09 | 北京技德系统技术有限公司 | 一种实时操作系统的应用框架及其方法 |
CN109857556A (zh) * | 2019-01-15 | 2019-06-07 | Oppo广东移动通信有限公司 | 内存回收方法及装置、存储介质和电子设备 |
CN109857556B (zh) * | 2019-01-15 | 2021-01-08 | Oppo广东移动通信有限公司 | 内存回收方法及装置、存储介质和电子设备 |
CN110362451A (zh) * | 2019-07-17 | 2019-10-22 | 北京小米移动软件有限公司 | 一种监控方法、装置及介质 |
CN110362451B (zh) * | 2019-07-17 | 2023-09-26 | 北京小米移动软件有限公司 | 一种监控方法、装置及介质 |
CN110908771A (zh) * | 2019-11-14 | 2020-03-24 | 杭州趣链科技有限公司 | 一种基于java的智能合约的内存管理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108052388A (zh) | 一种Android中内存回收方法及装置 | |
CN103744723B (zh) | 一种线程池的管理方法和管理系统 | |
CN103514102B (zh) | 一种Java虚拟机实现内存垃圾回收的方法及装置 | |
US8589653B2 (en) | Memory management method and computer using the method | |
CN106681811A (zh) | 基于线程池的多线程调度方法及装置 | |
CN110362407A (zh) | 计算资源调度方法及装置 | |
CN106598572B (zh) | 一种应用的退出方法及装置 | |
CN112799817A (zh) | 一种微服务资源调度系统和方法 | |
CN106803790A (zh) | 一种集群系统的升级控制方法及装置 | |
CN103902364A (zh) | 一种物理资源管理方法、装置及智能终端设备 | |
CN115220921B (zh) | 资源调度方法及相关装置、图形处理器、摄像器件和介质 | |
CN108197004A (zh) | Ios应用的方法耗时、加载视图耗时的监测方法及系统 | |
CN106502778A (zh) | 一种终端及其进程调度优化方法 | |
WO2012006920A1 (zh) | 一种自适应回收垃圾对象的系统及方法 | |
CN103309796A (zh) | 一种组件对象模型对象的监控方法和装置 | |
CN108255608B (zh) | 一种内存池的管理方法 | |
CN103019848B (zh) | 一种pci总线非向量中断实现方法 | |
CN104572279A (zh) | 一种支持节点绑定的虚拟机动态调度方法 | |
CN106897147A (zh) | 一种应用容器引擎容器资源调度方法及装置 | |
JP5380695B2 (ja) | メモリ管理方法、計算機システム及びメモリ管理プログラム | |
KR100846451B1 (ko) | 멀티 쓰레드 기반 센서 운영체제 환경에서의 스택 할당방법 | |
CN102737198B (zh) | 对象保护方法及装置 | |
CN107305507A (zh) | 死锁控制方法和装置 | |
CN105843735A (zh) | 一种终端内存的消耗方法及装置 | |
CN111158317B (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180518 |