业务处理方法和Java虚拟机技术

技术编号:6869297 阅读:250 留言:0更新日期:2012-04-11 18:40
本发明专利技术实施例提供一种业务处理方法和Java虚拟机。方法包括:接收部件的调用某个功能的请求,通过弱引用对象调用实现所述功能的模块对象;将所述模块对象返回给所述部件以进行业务处理;判断所述模块对象是否弱可达,若为是,则清除所述模块对象。本发明专利技术实施例提供的业务处理方法和Java虚拟机,模块管理容器接收部件发出的调用设定功能的请求时,通过弱引用对象调用实现该设定功能的模块对象,部件调用该模块对象进行业务处理之后,若模块对象弱可达,则能够被虚拟机清除,从而使模块占用的内存资源能够及时释放,节约了内存资源。

【技术实现步骤摘要】

本专利技术涉及计算机
,特别涉及一种业务处理方法和Java虚拟机
技术介绍
在采用Java或其他编程语言的虚拟机中,虚拟机根据垃圾收集算法判断内存是否可以释放,判断的方法是对象的可达性,如果对象是可达的则不可以释放,如果对象是不可达的则需要释放。在虚拟机运行时,从引用根集(Root set of references)通过直接或间接方式引用到的对象是可达对象,其它对象是不可达对象。不可达的对象就是垃圾,需要回收以释放内存。通常以“Root set of references”作为垃圾回收的起点,能够遍历得到的对象就是可达的,遍历不到的对象就是不可达的。其中,“Root set of references”是一个集合, 即可以作为垃圾回收的起点有多个,但最主要的起点是活动线程的栈和系统类加载器,一般可以以静态变量作为垃圾收集的起点。现有技术中,程序中的模块会在首次使用时加载并初始化,在整个虚拟机的生命周期内一直存活直到进程关闭。模块加载以后占用的堆内存资源、模块类占用的永久段内存资源不会适时释放,导致虚拟机消耗的内存随着使用功能的增多而不断增长,部分模块在执行的所有线程退出后几毫秒至几天甚至几年释放才能释放,造成内存资源浪费。
技术实现思路
本专利技术实施例提供了一种业务处理方法和Java虚拟机,以解决现有的模块卸载方法浪费内存资源的问题。本专利技术实施例提供一种业务处理方法,包括接收部件的调用某个功能的请求,通过弱引用对象调用实现所述功能的模块对象;将所述模块对象返回给所述部件以进行业务处理;判断所述模块对象是否弱可达,若为是,则清除所述模块对象。本专利技术实施例还提供一种Java虚拟机,包括模块管理容器,用于对弱引用对象以及模块对象进行管理,所述模块对象实现设定的功能,所述模块管理容器在收到部件的调用所述设定的功能的请求时,通过所述弱引用对象调用所述模块对象,将所述模块对象返回给所述部件;垃圾收集器,用于在所述模块对象为弱可达时,清除所述模块对象。本专利技术实施例提供的业务处理方法和Java虚拟机,模块管理容器接收部件发出的调用设定功能的请求时,通过弱引用对象调用实现该设定功能的模块对象,部件调用该模块对象进行业务处理之后,若模块对象弱可达,则能够被虚拟机清除,从而使模块占用的内存资源能够及时释放,节约了内存资源。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术提供的业务处理方法一个实施例的流程图;图2为本专利技术实施例提供的业务处理方法涉及的堆内存的结构示意图;图3a为图1所示实施例的一种业务处理过程中堆内存中各模块的引用关系图;图北为图1所示实施例的一种业务处理之后堆内存中各模块的引用关系图;图3c为图1所示实施例的又一种业务处理过程中堆内存中各模块的引用关系图;图3d为图1所示实施例的又一种业务处理之后堆内存中各模块的引用关系图;图如为本专利技术提供的业务处理方法又一个实施例中模块管理容器向部件返回模块对象的流程图;图4b为本专利技术提供的业务处理方法又一个实施例中部件调用模块对象进行业务处理的流程图;图5为图如和图4b所示实施例的业务处理过程中堆内存和永久段中各模块的引用关系图;图6为本专利技术提供的业务处理方法另一个实施例中模块管理容器向部件返回模块对象的流程图;图7为本专利技术提供的Java虚拟机一个实施例的结构示意图;图8为本专利技术提供的Java虚拟机又一个实施例的结构示意图。具体实施例方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。图1为本专利技术提供的业务处理方法一个实施例的流程图,如图1所示,该方法包括S101、接收部件的调用某个功能的请求,通过弱引用对象调用实现该功能的模块对象。S102、将该模块对象返回给该部件以进行业务处理。S103、判断该模块对象是否弱可达,若为是,则执行S104,否则流程结束。S104、清除该模块对象。本专利技术实施例提供的业务处理方法,可以在Java程序中应用,还可以在使用垃圾收集回收内存,并支持弱引用的其他编程语言中应用。图2为本实施例提供的业务处理方法涉及的堆内存的结构示意图,如图2所示,其中,模块管理容器A用来管理模块对象B的加载,保存模块对象B,并保证模块对象B可以被其它模块访问,在整个虚拟机系统的生命周期内总是强可达的。模块对象B在虚拟机系统中用于实现某种特定功能,整个虚拟机系统中可能包括很多个模块对象B,模块对象B能够被模块管理容器A加载和管理。本专利技术实施例中涉及的部件C,可以是虚拟机系统中的任一部件,具体可以是被模块管理容器A管理的模块对象B,也可以独立于模块管理容器A,部件C通过调用能够实现不同特定功能的模块对象B来进行相应的业务处理。为了保证部件C调用模块对象B进行业务处理后,模块对象B弱可达,进而能够并被虚拟机清除,模块对象管理容器A可以在收到部件C调用某种设定功能的请求后,通过模块对象B可以由模块管理容器A通过弱引用对象间接持有调用能够实现该设定功能的模块对象B,模块管理容器A可以将模块对象B对外提供的接口返回给部件C,也可以将模块对象对外提供的功能D返回给部件进行业务处理。业务处理后,如果模块对象B弱可达,则虚拟机系统可以将该模块对象B清除。具体的模块管理容器A调用模块对象B时,可以不直接调用模块对象B,而是通过生成一个弱引用对象E来调用模块对象B。作为一种可行的实施方式,模块对象B在进行业务处理对外服务过程中,即部件C 使用模块对外提供的功能D时,部件C可以调用模块对象B提供的接口进行业务处理,这种情况下,在部件C进行业务处理的过程中,部件C对模块对象B维持着强引用关系,堆内存中各模块的引用关系可参见图3a。当部件C业务处理结束后,部件C对模块对象B的强引用关系消失,而模块对象B只剩下弱引用对象E对它的弱引用,此时堆内存中各模块的引用关系可参见图北。因此,在模块对象B进行业务处理之后,模块对象B可以是弱可达的,虚拟机可以将这些模块对象B清除。作为另一种可行的实施方式,模块对象B在进行业务处理对外服务过程中,还可以调用模块对象B生成模块对外提供的功能D,并通过模块对外提供的功能D进行业务处理。这种情况下,在部件C进行业务处理的过程中,部件C会维持对模块对外提供的功能D 的强引用关系。在业务处理过程中,堆内存中各模块的引用关系可参见图3c,模块对外提供的功能D维持对模块对象B的强引用,部件C又强引用着模块对外提供的功能D。由于部件 C是强可达的,因此,模块对象B和模块对外提供的功能D都是强可达的。当模块对象B结束业务处理时,对内存中各模块之间的引用关系如图3d所示,即部件C结束对模块对外提供的功能D的使用时,部件C对模块对外提供的功能D的强引用消失。而模块对象B进行业务处理的过程本文档来自技高网...

【技术保护点】
1.一种Java虚拟机,其特征在于,包括:模块管理容器,用于对弱引用对象以及模块对象进行管理,所述模块对象实现设定的功能,所述模块管理容器在收到部件的调用所述设定的功能的请求时,通过所述弱引用对象调用所述模块对象,将所述模块对象返回给所述部件;垃圾收集器,用于在所述模块对象为弱可达时,清除所述模块对象。

【技术特征摘要】

【专利技术属性】
技术研发人员:梁孔荣
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:94

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1