繁体   English   中英

我什么时候需要回收?

[英]When do I need to recycle?

我有一个applicationScope受管bean,它将关于一系列应用程序的大量信息加载到Map中。 然后,以下方法是Bean的一部分:

public Database getAppDB() {
    Database appDB = null;
    try{
       Session s = ExtLibUtil.getCurrentSession();
       serverName = s.createName(s.getCurrentDatabase().getServer()).getCommon();
       appDB = s.getDbDirectory(serverName).openDatabaseByReplicaID(this.getAppRepID());
       return appDB;
  }catch (NotesException e){
      System.out.println(e.toString());
      return appDB;
  }

}

现在,此方法声明两个对象(Session和appDB)。 不知道它们是否需要在返回之前进行回收,如果是这样,因为appDB是返回值,所以该怎么做。 本届会议可以轻松回收。 现在很清楚,如果我从一些SSJS调用此方法:

var thisDB:NotesDatabase = appProps[ssApplication].appDB;

我需要在SSJS中回收thisDB。

另外,如果我在SSJS中执行以下操作:

var cNames =  appProps[ssApplication].appDB.getView("vwFTSearch").getColumnNames();

我假设没有什么可回收的?

详细的答案是在Knut粘贴的其他两个问题中。

对您的特定问题的简短回答是,您不应getAppDB()方法中回收这些对象。

投放页面后,会话将自动回收。 该方法的调用者(对于您的情况为SSJS)应回收数据库对象。

一般规则是:您销毁(回收)您创建的内容。 你离开所给的。 会话和数据库是系统提供的对象(给定的),因此即使您使用其他函数来获取它们,也可以将它们保留下来。

其余的我发现了一个合理的实践:在创建对象的函数中,它被回收了,而不是其他地方。 您必须采取一些“实用”的“创造”方法。 例如,当您遇到以下情况:

 var custDB = getCustDB(curUser);

那么您就不会将getCustDB视为创建者,而是那行代码并具有recycle(); 在该代码所在的函数中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM