Memory leaks SWT使用操作系统资源,但限制是什么,如何分析?
SWT使用操作系统资源,因此SWT内存消耗不依赖于堆(xms xms)和非堆(元空间)。如果我在那一点上错了,请纠正我Memory leaks SWT使用操作系统资源,但限制是什么,如何分析?,memory-leaks,java-8,swt,rcp,Memory Leaks,Java 8,Swt,Rcp,SWT使用操作系统资源,因此SWT内存消耗不依赖于堆(xms xms)和非堆(元空间)。如果我在那一点上错了,请纠正我 SWT组件使用的资源(颜色、字体、图像等)是否有任何限制 如何知道是否达到了限制,以及如何分析该限制 如果达到此限制,Java RCP应用程序可能会在没有JavaOutOfMemoryError的情况下崩溃(只是一个pid文件) 注意:我使用Sleak来确定应用程序当前使用的图形对象的数量如上所述,特定于Windows的GDI句柄的最大数量会影响(SWT)进程可以分配多少资
- SWT组件使用的资源(颜色、字体、图像等)是否有任何限制
- 如何知道是否达到了限制,以及如何分析该限制
- 如果达到此限制,Java RCP应用程序可能会在没有Java
的情况下崩溃(只是一个pid文件)OutOfMemoryError
SWTError
通常,可以像处理任何其他异常一样处理该异常,并且在释放未使用的资源后,可以创建新的资源
IIRC,RCP应用程序的默认异常处理程序将打开一个对话框,要求用户在这种情况下优雅地退出应用程序
然而,SWT应用程序中的句柄不足通常表明您创建/使用小部件的策略是错误的
减少资源数量的一个常见策略是使用惰性/虚拟
树和表,并且仅在小部件可见时创建它们,在不再需要时处理它们。例如,在TabFolder
中,除非选中TabItem
,否则您将推迟填充该项。AFAIK每个应用程序的Windows上的限制为GDI 65536个句柄。如果超过该值,应用程序将崩溃,出现SWTError:No-more handles
。也可能有用。