我使用gephi绘制社会graph.But,它使用singleton创建类ProjectController。
@ServiceProvider(service = ProjectController.class)
public class ProjectControllerImpl implements ProjectController {
private enum EventType {
INITIALIZE, SELECT, UNSELECT, CLOSE, DISABLE
};
//Data
private final ProjectsImpl projects = new ProjectsImpl();
private final List<WorkspaceListener> listeners;
private WorkspaceImpl temporaryOpeningWorkspace;
public ProjectControllerImpl() {
//Listeners
listeners = new ArrayList<WorkspaceListener>();
listeners.addAll(Lookup.getDefault().lookupAll(WorkspaceListener.class));
registerNetbeansPropertyEditors();
}我们可以通过netbeans获得这个类:
ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);您可以看到它在这个class.When中有一个列表,您可以从这个单例创建一个对象,它会添加list.It使内存泄漏,我想在org.openide.util.Lookup中杀死这个对象,我该怎么办?
发布于 2014-09-15 08:20:08
您链接到的ProjectControllerImpl类的代码还包含一个方法removeWorkspaceListener(),您可以使用该方法在不再需要单个侦听器时注销它们(假设您了解这些侦听器,并且可以删除它们)。
当然,您可以使用自己的ProjectController实现以不同的方式处理侦听器:
WeakReference<WorkspaceListener>实例阻止垃圾收集,则可以存储ProjectControllerImpl实例而不是对WorkspaceListener的强引用。(这意味着,只要侦听器实例存在,对每个侦听器的强引用就需要存储在其他地方。)WorkspaceListener存储在ProjectControllerImpl中,而是在实际需要时通过lookupAll()获取它们。https://stackoverflow.com/questions/25842033
复制相似问题