在 Eclipse RCP 应用程序中,我试图打开许多编辑器。它基本上是一棵树,有很多节点,每个节点都会打开一个编辑器。当我打开 150 到 200 个编辑器的访问权限并尝试为下一个树节点打开一个编辑器时,它不会打开。Eclipse 控制台显示“org.eclipse.swt.SWTError:没有更多句柄”。但是,如果我关闭一些已经打开的编辑器,我可以打开尽可能多的新树节点编辑器。
我监控了 javaw.exe 的内存使用情况;打开每个编辑器时内存会增加,但句柄数在某个 MAX 之后保持不变。发生错误时,javaw.exe 消耗大约 120,000K。错误期间所有应用程序消耗的总内存为 700,000K。如果我尝试打开更多的应用程序,例如 IE,由于系统内存不足,它要么无法打开,要么以较少的 UI 功能打开。尽管有 2GB RAM,但所有这一切!
我还尝试在 eclipse 内存设置中增加 vmargs,但这也没有太大帮助。
a) 我的代码中是否存在内存泄漏?我不认为它在某个 MAX 之后手柄保持不变。据我了解,当编辑器处于打开状态时,其上的 SWT 控件在关闭之前不会被释放。
b) 最大值是多少。可以被应用程序用完的内存?由于我的 RAM 是 2GB,我发现我对所有进程的总体内存应该比我认为大约 680MB 的 700,000K 好得多。