SWT 使用操作系统资源,但限制是什么以及如何分析它?
SWT uses operating system resources, but what is the limit and how to profile that?
SWT 使用操作系统资源,因此 SWT 内存消耗不依赖于堆 (xms xms) 和非堆(元空间)。如果我在这一点上错了,请纠正我。
SWT 组件使用的资源(颜色、字体、图像...)是否有任何限制?
如何知道是否达到限制以及如何对其进行分析?
如果达到此限制,Java RCP 应用程序可能会在没有 java OutOfMemoryError
(只是一个 pid 文件)的情况下崩溃?
P.S.: 我使用 Sleak 来跟踪应用程序当前使用的图形对象的数量
如 Baz mentioned, the maximum number of GDI handles, which is specific to Windows, influences how many resources a (SWT) process can allocate. See the this question 了解更多详情。在其他平台上,限制可能不同。
如您所知,SWT Sleak 是监视 SWT 应用程序图形资源使用情况的正确工具。
如果一个应用程序用完了句柄,它不仅仅是 'crash'。达到限制并尝试创建新资源时会引发 SWTError
。
一般来说,可以像处理任何其他异常一样处理异常,释放未使用的资源后,可以创建新资源。
IIRC,RCP 应用程序的默认异常处理程序将打开一个对话框,要求用户在这种情况下正常退出应用程序。
但是,运行 SWT 应用程序中的句柄不足通常表明您的小部件策略 created/used 是错误的。
减少资源数量的常见策略是使用 lazy/virtual Tree
s 和 Table
s 并仅在小部件可见时创建小部件,在不可见时丢弃它们需要更长的时间。例如,在 TabFolder
中,您将推迟填充 TabItem
,除非它被选中。
SWT 使用操作系统资源,因此 SWT 内存消耗不依赖于堆 (xms xms) 和非堆(元空间)。如果我在这一点上错了,请纠正我。
SWT 组件使用的资源(颜色、字体、图像...)是否有任何限制?
如何知道是否达到限制以及如何对其进行分析?
如果达到此限制,Java RCP 应用程序可能会在没有 java
OutOfMemoryError
(只是一个 pid 文件)的情况下崩溃?
P.S.: 我使用 Sleak 来跟踪应用程序当前使用的图形对象的数量
如 Baz mentioned, the maximum number of GDI handles, which is specific to Windows, influences how many resources a (SWT) process can allocate. See the this question 了解更多详情。在其他平台上,限制可能不同。
如您所知,SWT Sleak 是监视 SWT 应用程序图形资源使用情况的正确工具。
如果一个应用程序用完了句柄,它不仅仅是 'crash'。达到限制并尝试创建新资源时会引发 SWTError
。
一般来说,可以像处理任何其他异常一样处理异常,释放未使用的资源后,可以创建新资源。
IIRC,RCP 应用程序的默认异常处理程序将打开一个对话框,要求用户在这种情况下正常退出应用程序。
但是,运行 SWT 应用程序中的句柄不足通常表明您的小部件策略 created/used 是错误的。
减少资源数量的常见策略是使用 lazy/virtual Tree
s 和 Table
s 并仅在小部件可见时创建小部件,在不可见时丢弃它们需要更长的时间。例如,在 TabFolder
中,您将推迟填充 TabItem
,除非它被选中。