lotus回收java对象_为什么调用Recycle()措施对每个Java对象很重要?.

当你想要直接在本地拜会统一个服务器的Lotus Notes® objects消息时,你能够用Java的代办(agent),小服务过程(servlet),薄利用过程(applet)可能自力更生的利用过程来举行。

薄利用过程[applet]穿越模仿LotusScript对象模型,使开发人员更容易利用这些工具。例如,穿越利用LotusScript可能Java类来获得一个数据库的句柄,以及包括数据库消息的会话(session)。一旦会话(session)被创立,你就能够穿越这个会话(session)来引用相应的数据库(database)。

然而,为了告终最佳的系统功能,回收创立过的对象是极其重要的。对于LotusScript对象可能其他的Java对象。什么时候是调用措施Recycle()的最佳时机呢?

解答:

利用LotusScript来创立对象

当利用LotusScript来创立一个对象的时候,切实上你创立的是两个对象:一个在LotusScript,一个在Notes后台(C++code)对象。LotusScript只是指向C++对象,而恳挚告终类的行动的是C++。当LotusScript的代办(agent)或事件(event)告终后,这两个对象将积极废止。万一对象未曾肃清,他们将继续保留在内存里,从而构成内存泄露。

利用Java创立对象

万一你用Java创立一个对象,同样是这么的。Java对象是一个指针,指向用C++创立的对象。这在纯Java代码里是很常见的,穿越把一些变量设置为空,使草芥回收能够即刻厉行。这种机制被称为积极的草芥回收。

然而,当Java利用notes对象时把相干的变量设置为空,用来符号必需草芥回收,而对应的C++对象并不做任何处理。那草芥回收就只会作用于Java对象,而不会波及C++对象。

为什么要回收?

Recycle()在回收C++对象的同时把Java对象设置为可草芥回收的事态。万一你只是符号对象为空,你依旧会遭到内?**侍狻5蹦阍诖旃苡枚韵螅贝旄嬷帐保械亩韵?无论是Java还是C++)都会被回收。当利用Java服务器过程(Servlet),.jsp 可能自力更生的利用过程的时候,Recycle()措施定然要被利用,因为Domino自己是不能打扫这些后台对象的。

相反,万一一个对象设置为可回收的,它将不会被置为空(Null)。从理论上说,你依旧能够引用这个对象,并且不会发生浩劫性讹谬,只不过要抛出失常(exception)。当多个引用来调用统一个的对象,这一点是很重要的,例如:“db = mydb.nsf” 和 “db = yourdb.nsf” 同时利用。因为这么极其混乱,并且获得的收获也不可靠。

打听什么样的对象将被创立,将如何设置,以及什么时候利用是很重要的www.xiaochugao.org。对象是一个层次的构造。例如,回收一个父文档对象,相应的也就回收了它所有的子对象。因为会话(session)对象在全副对象层次的最上层,因而,回收一个会话(session)对象的时候,同时也回收了放在这个会话(session)对象中所有其他的对象。

查询对象:

在Domino Designer进去设计面板,点击代码区域,查询“回收(recycle)”可能任何你想要查询的对象。并设置查询的范围为目前对象可能所有对象。

万一未曾查找就任何Recycle()措施,你能够找一个开发人员来看一下,并在所有的对象利用完后加上一些代码往返收它们。有一点必需当心,在一个循环里利用new 来实例化一个类时,每厉行顺次循环,一个新的object就会被创立,除非你在循环体里回收这个objectmysingle.org,否则object将始终驻留在内存里。

当心:

下面代码是个脚本例子,供给打听决这个问题措施的解释。你能够利用这个脚本,然而要自己担负危险。以施行动目标使这个例子,脚本定然确定法定了如下所示。产品扶持无法自定义此脚本的翔实环境或利用过程。

循环利用Recycle()和积极草芥回收的例子:

import lotus.domino.*;public class JavaAgent extends AgentBase {public void NotesMain() {try {Session session = getSession();AgentContext agentContext = session.getAgentContext();Database db = agentContext.getCurrentDatabase();View v = db.getView("SomeView");// turn off auto-update so that if we make a change to a document // and resave, it won't affect the sort order in the viewv.setAutoUpdate(false);Document doc = v.getFirstDocument();Document temp = null; //sets the temp for garbage collection immediatelywhile (doc != null){// do something with the document here...// whatever, just don't delete it (yet)!temp = v.getNextDocument(doc); // get the next onedoc.recycle(); // recycle the one we're done withdoc = temp;}// end while} catch(Exception e){e.printStackTrace();}}}以便您在审查代码的过程中当心到这些常见的细节性讹谬。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值