CN107908567A - 一种Java对象引用方法、装置和介质 - Google Patents
一种Java对象引用方法、装置和介质 Download PDFInfo
- Publication number
- CN107908567A CN107908567A CN201711206347.1A CN201711206347A CN107908567A CN 107908567 A CN107908567 A CN 107908567A CN 201711206347 A CN201711206347 A CN 201711206347A CN 107908567 A CN107908567 A CN 107908567A
- Authority
- CN
- China
- Prior art keywords
- variable object
- intermediate variable
- release
- variable
- request
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种Java对象引用方法、装置和介质,用以解决由于强引用无法自动释放导致占用内存过大而造成的程序崩溃问题。所述Java对象引用方法,包括:在中间变量对象接收到第一变量对象请求引用第二变量对象的引用请求时,根据所述引用请求,利用所述中间变量对象调用所述第二变量对象,其中,所述中间变量对象为针对存在强引用关系的第一变量对象和第二变量对象所定义的;针对所述中间变量对象,监控是否满足预设的释放条件;在满足预设的释放条件时,调用释放函数释放所述中间变量对象。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种Java对象引用方法、装置和介质。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
Java对象的引用包括强引用、软引用、弱引用和虚引用,其中,强引用是指创建一个对象并把这个对象赋给一个引用变量;强引用有引用变量指向时永远不会被垃圾回收。当内存空间不足,Java虚拟机宁愿抛出Out Of Memory Error(内存溢出)错误,使程序异常终止,也不会随意回收具有强引用的对象来解决内存不足的问题。
例如,在针对移动端开发的时候,调用系统的NSTimer(定时器),NSTimer会对调用对象进行强引用,如果不在页面结束时手动调用invalidate函数(使绘制的窗口无效),那么NSTimer则永远无法停止,页面也无法真正的释放,因此,此时NSTimer和页面进行了相互引用,无法被释放。又如,KVO(key-value observing)提供一种机制,当被观察对象的属性被修改后,则观察对象就会接受到通知。简单的说,就是每次指定的被观察对象的属性被修改后,KVO就会自动通知相应的观察对象了。在使用KVO时,如果注册了某个观察对象,在dealloc(对象释放)时不主动释放,则会有程序崩溃的问题存在。
发明内容
本发明实施例提供了一种Java对象引用方法、装置和介质,用以解决由于强引用无法自动释放导致占用内存过大而造成的程序崩溃问题。
本发明实施例提供了一种Java对象引用方法,包括:
在中间变量对象接收到第一变量对象请求引用第二变量对象的引用请求时,根据所述引用请求,利用所述中间变量对象调用所述第二变量对象,其中,所述中间变量对象为针对存在强引用关系的第一变量对象和第二变量对象所定义的;
针对所述中间变量对象,监控是否满足预设的释放条件;
在满足预设的释放条件时,调用释放函数释放所述中间变量对象。
可选地,在中间变量对象接收第一变量对象请求引用第二变量对象的引用请求之前,还包括:
针对所述中间变量对象,定义计数器;以及
所述方法,还包括:
如果所述中间变量每被引用一次,所述计数器的计数加1;
如果所述中间变量每被释放一次,所述计数器的计数减1。
可选地,在满足预设的释放条件时,调用释放函数释放所述中间变量,具体包括:
在所述计数器的计数为预设值时,调用释放函数释放所述中间变量。
可选地,所述第二变量对象包括定时器NSTimer和键值观察KVO;所述释放函数包括对象释放dealloc函数。
本发明实施例提供一种Java对象引用装置,包括:
第一调用单元,用于在中间变量对象接收到第一变量对象请求引用第二变量对象的引用请求时,根据所述引用请求,利用所述中间变量对象调用所述第二变量对象,其中,所述中间变量对象为针对存在强引用关系的第一变量对象和第二变量对象所定义的;
监控单元,用于针对所述中间变量对象,监控是否满足预设的释放条件;
第二调用单元,用于在所述监控单元监控到满足预设的释放条件时,调用释放函数释放所述中间变量对象。
可选地,本发明实施例提供的Java对象引用装置,还包括:
定义单元,用于在中间变量对象接收第一变量对象请求引用第二变量对象的引用请求之前,针对所述中间变量对象,定义计数器;
计数单元,用于如果所述中间变量每被引用一次,调整计数器的计数加1;如果所述中间变量每被释放一次,调整计数器的计数减1。
可选地,所述第二调用单元,具体用于在所述计数器的计数为预设值时,调用释放函数释放所述中间变量。
可选地,所述第二变量对象包括定时器NSTimer和键值观察KVO;所述释放函数包括对象释放dealloc函数。
本发明实施例提供另外一种Java对象引用装置,包括至少一个处理单元、以及至少一个存储单元,其中,所述存储单元存储有计算机程序,当所述程序被所述处理单元执行时,使得所述处理单元执行上述任一方法所述的步骤。
本发明实施例提供一种计算机可读介质,其存储有可由计算装置执行的计算机程序,当所述程序在计算装置上运行时,使得所述计算装置执行上述任一方法所述的步骤。
本发明实施例提供的Java对象引用方法、装置和介质,针对存在强引用关系的第一变量对象和第二变量对象,定义中间变量,当第一变量对象引用第二变量对象时,可以通过定义的中间变量进行引用,当监控到中间变量对象满足预设的释放条件时,调用释放函数释放该中间变量对象,这样,使得第一变量对象和第二变量对象之间的强引用关系变为弱引用关系,避免了由于强引用关系的存在导致内存无法释放而造成的程序崩溃的问题。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1a为根据本发明实施方式的应用场景示意图;
图1b为本发明实施例中,Java对象引用方法的实施流程示意图;
图2为本发明实施例中,针对中间变量对象ptr_manage定义的第一种计数器调整示意图;
图3为本发明实施例中,针对中间变量对象ptr_manage定义的第二种计数器调整示意图;
图4a为本发明实施例中,针对变量对象42定义的第一种计数器调整示意图;
图4b为本发明实施例中,针对变量对象42定义的第二种计数器调整示意图;
图4c为本发明实施例中,针对变量对象42定义的第三种计数器调整示意图;
图5为本发明实施例中,强引用关系释放示意图;
图6为本发明实施例中,KVO对象的自释放示意图;
图7为本发明实施例中,Java对象引用装置的结构示意图;
图8为本发明实施例中,另外一种Java对象引用装置的结构示意图。
具体实施方式
为了解决由于两个变量对象之间的强引用关系无法释放内存而造成的程序崩溃问题,本发明实施例提供了一种Java对象引用方法、装置和介质。
以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
传统的基于C/S(Client/Server,客户端/服务器)架构的应用中,一般由客户端应用程序及服务器端应用程序相互配合为用户提供服务。客户端应用程序是指安装在终端上,且能够与网络侧的服务器进行信息交互,通过与服务器端应用程序的相互配合运行,为用户提供服务的客户端应用程序。其中,客户端可以为网页的浏览器,也可以为安装于移动终端,如手机,平板电脑等中安装的客户端等等。
首先参考图1a,其为根据本发明实施方式的应用场景示意图。通过在终端上安装不同的应用客户端可以为用户提供不同的互联网应用,例如,新闻客户端可以为用户提供新闻资源浏览功能,视频客户端可以为用户提供视频资源浏览功能等,电子书客户端可以为用户提供书籍资源浏览功能等等。
用户10通过终端设备11访问服务器12。其中,所述终端设备11中安装有应用客户端,用户10通过应用客户端访问服务器12提供的应用。终端设备11和服务器12通过通信网络进行通信连接,该网络可以为局域网、广域网等。终端设备11可以为手机、平板电脑等,服务器12可以为任何能够提供互联网业务的服务器设备。
其中,用户通过客户端提供的H5页面访问服务器12提供的应用。如果页面中包含有和时间相应的应用时,例如,页面中包含的轮播图,倒计时以及定时器等,这种情况下,页面加载的时候会启动定时器,此时,定时器和页面之间存在相互引用的关系,该引用关系为强引用。
发明人发现,对于存在强引用关系的Java对象,需要主动调用释放函数才能释放,也就是说,强引用关系在页面被关闭时如果不去主动调用释放函数,定时器不会被释放,则会造成循环引用导致内存占用无法释放,造成程序崩溃的问题。
有鉴于此,本发明实施例提供了一种Java对象引用方法,通过定义中间变量对象,这样,存在强引用关系的变量对象之间在进行引用时,不是直接进行引用,而是通过定义的中间变量对象进行引用,当定义的中间变量对象满足预设的释放条件时,调用释放函数释放该中间变量对象,这样,使得两者之间强引用关系变为弱引用关系,对于弱引用关系,系统可以自动调用释放函数来解除,这样,可以释放程序所占用的内存,避免由于强引用关系占用的内存无法释放造成的程序崩溃问题。
如图1b所示,其为本发明实施例提供的Java对象引用方法的实施流程示意图,可以包括以下步骤:
S11、在中间变量对象接收到第一变量对象请求引用第二变量对象的引用请求时,根据所述引用请求,利用所述中间变量对象调用所述第二变量对象。
具体实施时,针对存在强引用关系的第一变量对象和第二变量对象,定义中间变量对象。例如,,针对可能造成强引用关系的变量对象object,可以定义一个中间变量对象ptr_manage,当其他变量对象需要引用变量对象object时,可以通过中间变量对象ptr_manage进行引用。当第一变量对象需引用第二变量对象时,定义所述第一变量对象引用所述中间变量对象,所述中间变量对象引用所述第二变量对象。
S12、针对所述中间变量对象,监控是否满足预设的释放条件。
具体实施时,针对中间变量,可以定义一个计数器,如果监控到中间变量每被引用一次,则调整计数器的计数加1;相应地,如果监控到中间变量每被释放一次,则调整计数器的计数减1。
如图2所示,其中,S1和S2表示强引用,W1表示弱引用。相应地,针对中间变量对象ptr_manage定义的计数器中,S1和S2引用中间变量对象ptr_manage后,针对中间变量对象ptr_manage定义的计数器中的shared_ref_cnt=2;W1引用中间变量对象ptr_manage后,针对中间变量对象ptr_manage定义的计数器中的weaked_ref_cnt=1。如果S1和S2释放中间变量对象ptr_manage后,如图3所示,针对中间变量对象ptr_manage定义的计数器中的shared_ref_cnt=0;由于W1仍然引用中间变量对象ptr_manage,因此,针对中间变量对象ptr_manage定义的计数器中的weaked_ref_cnt=1。
再如,如图4a所示,定义变量int*ip1=new int(42),当42被p1引用时,变量对象42的计数器加1变为1,如图4b所示,而当变量对象p2也引用42时,变量对象42的计数器再加1变为2,如图4c所示,当变量对象p2释放变量对象42后,变量对象42的计数器减1变为1。
基于此,步骤S13中,可以通过监控计数器的计数来监控中间变量是否满足预设的释放条件。
S13、在满足预设的释放条件时,调用释放函数释放所述中间变量对象。
具体实施时,当计数器的计数减为预设值,则可以确定中间变量对象满足预设的释放条件,调用释放函数释放中间变量。
例如,针对上述页面中包含轮播图的应用场景,在页面调用定时器定时轮询不同的图片进行显示时,不再是直接调用定时器,而是先定义中间变量,通过中间变量调用定时器,使得页面与定时器之间的引用关系变为弱引用,当退出页面调用释放函数释放中间变量,这样,在页面结束时定时器会自动关闭。
为了更好地理解本发明实施例,以下分别结合NSTimer和KVO的引用过程对本发明实施例的具体实施过程进行说明。
如图5所示,在VC中,XXView引用XXTimer,XXTimer需引用NSTimer,由于NSTimer会自动引用XXTimer,这样,将会造成XXTimer与NSTimer的强引用,导致占用的内存无法释放,可能造成程序崩溃的问题。
为了解决这个问题,本发明实施例中,在XXTimer内声明了一个成员变量XXTimerMember,XXTimerMember与NSTimer互相引用。通过监控针对XXTimerMember定义的计数器来判断XXTimerMember是否满足预设的释放条件。例如,在监控到针对XXTimerMember定义的计数器为预设值时,可以调用Invalidate函数以释放XXTimerMember。具体实施时,该预设值可以设置为1,如图5所示,当针对XXTimerMember定义的计数器的计数为1时,针对XXTimerMember调用Invalidate函数以释放XXTimerMember,这样,使得XXTimerMember与NSTimer之间的双向引用变为单向引用,即两者之间的引用关系由强引用变为弱引用,这样,在程序结束时,系统将主动调用dealloc函数释放弱引用关系,从而释放程序运行所占用的内存,避免了由于强引用关系的存在无法释放内存造成的程序崩溃问题。
如图6所示,XXCustomKVOView需要观察多个观察对象Keypath,根据本发明实施例中,XXCustomKVOView可以通过中间变量XXCustomKVO对观察对象进行观察,其中,addCustomObserver是指增加观察对象,NSObject+XXCustomKVO.h是指生成多个观察对象,customMemObserveKey+OBSER VERSUFFTX是针对每一观察对象生成相应的前缀,用以区分不同的观察对象。同样,具体实施时,针对中间变量XXCustomKVO定义计数器,当中间变量XXCustomKVO每被引用一次,则计数器的计数加1,当中间变量XXCustomKVO每被释放一次,则计数器的计数减1,当计数器减为预设值时,调用释放函数释放XXCustomKVO。
本发明实施例提供的Java对象引用方法中,针对可能存在强引用关系的第一变量对象和第二变量对象,定义中间变量,当第一变量对象引用第二变量对象时,可以通过定义的中间变量进行引用,当监控到中间变量对象满足预设的释放条件时,调用释放函数释放该中间变量对象,这样,使得第一变量对象和第二变量对象之间的强引用关系变为弱引用关系,避免了由于强引用关系的存在导致内存无法释放而造成的程序崩溃的问题。
基于同一发明构思,本发明实施例中还提供了一种Java对象引用装置,由于上述装置解决问题的原理与Java对象引用方法相似,因此上述装置的实施可以参见方法的实施,重复之处不再赘述。
如图7所示,其为本发明实施例提供的Java对象引用装置的结构示意图,包括:
第一调用单元71,用于在中间变量对象接收到第一变量对象请求引用第二变量对象的引用请求时,根据所述引用请求,利用所述中间变量对象调用所述第二变量对象,其中,所述中间变量对象为针对存在强引用关系的第一变量对象和第二变量对象所定义的;
监控单元72,用于针对所述中间变量对象,监控是否满足预设的释放条件;
第二调用单元73,用于在所述监控单元监控到满足预设的释放条件时,调用释放函数释放所述中间变量对象。
可选地,本发明实施例提供的Java对象引用装置,还可以包括:
所述定义单元,用于在中间变量对象接收第一变量对象请求引用第二变量对象的引用请求之前,针对所述中间变量对象,定义计数器;
计数单元,用于如果所述中间变量每被引用一次,调整计数器的计数加1;如果所述中间变量每被释放一次,调整计数器的计数减1。:
可选地,所述第二调用单元73,具体用于在所述计数器的计数为预设值时,调用释放函数释放所述中间变量。
为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本发明时可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。
在介绍了本发明示例性实施方式的方法和装置之后,接下来,介绍根据本发明的另一示例性实施方式的Java对象引用装置。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
在一些可能的实施方式中,根据本发明的Java对象引用装置可以至少包括至少一个处理单元、以及至少一个存储单元。其中,所述存储单元存储有计算机程序,当所述程序被所述处理单元执行时,使得所述处理单元执行本说明书上述描述的根据本发明各种示例性实施方式的Java对象引用方法中的步骤。例如,所述处理单元可以执行如图1b中所示的步骤S11、在中间变量对象接收到第一变量对象请求引用第二变量对象的引用请求时,根据所述引用请求,利用所述中间变量对象调用所述第二变量对象,步骤S12、针对所述中间变量对象,监控是否满足预设的释放条件,步骤S13、在满足预设的释放条件时,调用释放函数释放所述中间变量对象。
下面参照图8来描述根据本发明的这种实施方式的Java对象引用装置80。图8显示的Java对象引用装置80仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图8所示,Java对象引用装置80以通用计算设备的形式表现。Java对象引用装置80的组件可以包括但不限于:上述至少一个处理单元81、上述至少一个存储单元82、连接不同系统组件(包括存储单元82和处理单元81)的总线83。
总线83表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。
存储单元82可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)821和/或高速缓存存储器822,还可以进一步包括只读存储器(ROM)823。
存储单元82还可以包括具有一组(至少一个)程序模块824的程序/实用工具825,这样的程序模块824包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
Java对象引用装置80也可以与一个或多个外部设备84(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与Java对象引用装置80交互的设备通信,和/或与使得该Java对象引用装置80能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口85进行。并且,Java对象引用装置80还可以通过网络适配器86与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器86通过总线83与用于Java对象引用装置80的其它模块通信。应当理解,尽管图中未示出,可以结合Java对象引用装置80使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
在一些可能的实施方式中,本发明提供的Java对象引用方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在计算机设备上运行时,所述程序代码用于使所述计算机设备执行本说明书上述描述的根据本发明各种示例性实施方式的动态显示网页的方法中的步骤,例如,所述计算机设备可以执行如图1b中所示的步骤S11、在中间变量对象接收到第一变量对象请求引用第二变量对象的引用请求时,根据所述引用请求,利用所述中间变量对象调用所述第二变量对象,步骤S12、针对所述中间变量对象,监控是否满足预设的释放条件,步骤S13、在满足预设的释放条件时,调用释放函数释放所述中间变量对象。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本发明的实施方式的用于Java对象引用的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在计算设备上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种Java对象引用方法,其特征在于,包括:
在中间变量对象接收到第一变量对象请求引用第二变量对象的引用请求时,根据所述引用请求,利用所述中间变量对象调用所述第二变量对象,其中,所述中间变量对象为针对存在强引用关系的第一变量对象和第二变量对象所定义的;
针对所述中间变量对象,监控是否满足预设的释放条件;
在满足预设的释放条件时,调用释放函数释放所述中间变量对象。
2.如权利要求1所述的方法,其特征在于,在中间变量对象接收第一变量对象请求引用第二变量对象的引用请求之前,还包括:
针对所述中间变量对象,定义计数器;以及
所述方法,还包括:
如果监控到所述中间变量每被引用一次,调整计数器的计数加1;
如果监控到所述中间变量每被释放一次,调整计数器的计数减1。
3.如权利要求2所述的方法,其特征在于,在满足预设的释放条件时,调用释放函数释放所述中间变量,具体包括:
在所述计数器的计数为预设值时,调用释放函数释放所述中间变量。
4.如权利要求1、2或3所述的方法,其特征在于,所述第二变量对象包括定时器NSTimer和键值观察KVO;所述释放函数包括对象释放dealloc函数。
5.一种Java对象引用装置,其特征在于,包括:
第一调用单元,用于在中间变量对象接收到第一变量对象请求引用第二变量对象的引用请求时,根据所述引用请求,利用所述中间变量对象调用所述第二变量对象,其中,所述中间变量对象为针对存在强引用关系的第一变量对象和第二变量对象所定义的;
监控单元,用于针对所述中间变量对象,监控是否满足预设的释放条件;
第二调用单元,用于在所述监控单元监控到满足预设的释放条件时,调用释放函数释放所述中间变量对象。
6.如权利要求5所述的装置,其特征在于,还包括:
定义单元,用于在中间变量对象接收第一变量对象请求引用第二变量对象的引用请求之前,针对所述中间变量对象,定义计数器;
计数单元,用于如果所述中间变量每被引用一次,调整计数器的计数加1;如果所述中间变量每被释放一次,调整计数器的计数减1。
7.如权利要求6所述的装置,其特征在于,
所述第二调用单元,具体用于在所述计数器的计数为预设值时,调用释放函数释放所述中间变量。
8.如权利要求5、6或7所述的方法,其特征在于,所述第二变量对象包括定时器NSTimer和键值观察KVO;所述释放函数包括对象释放dealloc函数。
9.一种Java对象引用装置,其特征在于,包括至少一个处理单元、以及至少一个存储单元,其中,所述存储单元存储有计算机程序,当所述程序被所述处理单元执行时,使得所述处理单元执行权利要求1~4任一权利要求所述方法的步骤。
10.一种计算机可读介质,其特征在于,其存储有可由计算装置执行的计算机程序,当所述程序在计算装置上运行时,使得所述计算装置执行权利要求1~4任一权利要求所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711206347.1A CN107908567A (zh) | 2017-11-27 | 2017-11-27 | 一种Java对象引用方法、装置和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711206347.1A CN107908567A (zh) | 2017-11-27 | 2017-11-27 | 一种Java对象引用方法、装置和介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107908567A true CN107908567A (zh) | 2018-04-13 |
Family
ID=61848851
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711206347.1A Pending CN107908567A (zh) | 2017-11-27 | 2017-11-27 | 一种Java对象引用方法、装置和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107908567A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109302639A (zh) * | 2018-09-30 | 2019-02-01 | 武汉斗鱼网络科技有限公司 | 一种弹幕消息的分发方法、装置、终端和存储介质 |
CN109710415A (zh) * | 2018-12-29 | 2019-05-03 | 乐蜜有限公司 | 调用弹窗控件的处理方法、装置及电子设备 |
CN109992482A (zh) * | 2019-04-11 | 2019-07-09 | 广州华多网络科技有限公司 | 观察中间件析构方法、装置、计算机设备和存储介质 |
CN110968147A (zh) * | 2018-09-30 | 2020-04-07 | 武汉斗鱼网络科技有限公司 | 定时器创建的方法、装置、电子设备及介质 |
CN111813695A (zh) * | 2020-08-21 | 2020-10-23 | 网易(杭州)网络有限公司 | 代码检测方法、装置、介质及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060150168A1 (en) * | 2005-01-04 | 2006-07-06 | International Business Machines Corporation | Annotating graphs to allow quick loading and analysis of very large graphs |
CN101046755A (zh) * | 2006-03-28 | 2007-10-03 | 郭明南 | 一种计算机自动内存管理的系统及方法 |
CN102999328A (zh) * | 2011-09-09 | 2013-03-27 | 微软公司 | 在循环图中管理对象生命期 |
US20130080707A1 (en) * | 2011-09-23 | 2013-03-28 | International Business Machines Corporation | Prevention of classloader memory leaks in multitier enterprise applications |
CN103226476A (zh) * | 2013-05-20 | 2013-07-31 | 张永强 | 垃圾对象检测方法和装置 |
-
2017
- 2017-11-27 CN CN201711206347.1A patent/CN107908567A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060150168A1 (en) * | 2005-01-04 | 2006-07-06 | International Business Machines Corporation | Annotating graphs to allow quick loading and analysis of very large graphs |
CN101046755A (zh) * | 2006-03-28 | 2007-10-03 | 郭明南 | 一种计算机自动内存管理的系统及方法 |
CN102999328A (zh) * | 2011-09-09 | 2013-03-27 | 微软公司 | 在循环图中管理对象生命期 |
US20130080707A1 (en) * | 2011-09-23 | 2013-03-28 | International Business Machines Corporation | Prevention of classloader memory leaks in multitier enterprise applications |
CN103226476A (zh) * | 2013-05-20 | 2013-07-31 | 张永强 | 垃圾对象检测方法和装置 |
Non-Patent Citations (1)
Title |
---|
向晨宇: "ios的NSTimer与KVO的自释放", 《HTTP://WWW.IOSXXX.COM/BLOG/2017-03-27-IOS%E7%9A%84NSTIMER%E4%B8%8EKVO%E7%9A%84%E8%87%AA%E9%87%8A%E6%94%BE.HTML》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109302639A (zh) * | 2018-09-30 | 2019-02-01 | 武汉斗鱼网络科技有限公司 | 一种弹幕消息的分发方法、装置、终端和存储介质 |
CN110968147A (zh) * | 2018-09-30 | 2020-04-07 | 武汉斗鱼网络科技有限公司 | 定时器创建的方法、装置、电子设备及介质 |
CN110968147B (zh) * | 2018-09-30 | 2022-04-12 | 武汉斗鱼网络科技有限公司 | 定时器创建的方法、装置、电子设备及介质 |
CN109710415A (zh) * | 2018-12-29 | 2019-05-03 | 乐蜜有限公司 | 调用弹窗控件的处理方法、装置及电子设备 |
CN109710415B (zh) * | 2018-12-29 | 2023-10-03 | 卓米私人有限公司 | 调用弹窗控件的处理方法、装置及电子设备 |
CN109992482A (zh) * | 2019-04-11 | 2019-07-09 | 广州华多网络科技有限公司 | 观察中间件析构方法、装置、计算机设备和存储介质 |
CN109992482B (zh) * | 2019-04-11 | 2023-10-31 | 广州方硅信息技术有限公司 | 观察中间件析构方法、装置、计算机设备和存储介质 |
CN111813695A (zh) * | 2020-08-21 | 2020-10-23 | 网易(杭州)网络有限公司 | 代码检测方法、装置、介质及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107908567A (zh) | 一种Java对象引用方法、装置和介质 | |
CN111177617A (zh) | 基于运维管理系统的web直接运维方法、装置及电子设备 | |
CN111177112A (zh) | 基于运维管理系统的数据库阻断方法、装置及电子设备 | |
CN108011899A (zh) | 一种会话建立优化方法、装置和系统 | |
JP2024515928A (ja) | ページ遷移方法、装置、機器、記憶媒体及びプログラム製品 | |
CN111163324B (zh) | 信息处理方法、装置和电子设备 | |
US20150161123A1 (en) | Techniques to diagnose live services | |
CN108337301A (zh) | 应用程序的网络请求处理方法、装置、服务器及存储介质 | |
CN114979024A (zh) | 算力网络交易方法、装置、计算机可读介质及电子设备 | |
US9800473B2 (en) | Network based virtual collaborative problem solving space | |
CN112416632A (zh) | 事件通信方法、装置、电子设备和计算机可读介质 | |
US20240104671A1 (en) | Method and apparatus for group management, electronic device, and storage medium | |
CN106383731B (zh) | 一种数据迁移方法及移动终端 | |
CN106533718A (zh) | 数据处理方法及装置 | |
CN115022106B (zh) | 一种群信息处理方法、装置、设备及介质 | |
CN113778850A (zh) | 数据处理方法、装置、电子设备和计算机可读介质 | |
US10540136B2 (en) | Faster frame buffer rendering over a network | |
CN111522599B (zh) | 用于发送信息的方法和装置 | |
CN109407995B (zh) | 冷热数据管理方法、装置、电子设备及计算机可读介质 | |
CN110278236B (zh) | 一种企业业务融合通信方法及装置 | |
CN106254527B (zh) | 一种数据迁移方法及移动终端 | |
CN113486749A (zh) | 图像数据收集方法、装置、电子设备和计算机可读介质 | |
CN113094131A (zh) | 提示资源的显示方法、装置、终端、服务器及存储介质 | |
CN111813407A (zh) | 游戏开发方法、游戏运行方法、装置和电子设备 | |
US10956037B2 (en) | Provisioning storage allocation using prioritized storage system capabilities |
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: 20180413 |