我经常听说Java的Swing工具包被认为是“内存耗尽”(例如this answer)。
这是......
A ;
B ;或
C 这是一个毫无根据的主张,原因是缺乏对内存分配如何工作的理解(例如,因为任务管理器说应用程序已经分配了x MB,它实际上并不意味着它实际上正在全部使用它)
与类似的GUI工具包(不一定是Java)相比,我试图找到关于Swing真正的内存需求的具体客观分析。
答案 0 :(得分:4)
我经常在Swing中使用“膨胀”这个词来表示略有不同的东西:
Swing将自己需要的东西捆绑在一起,而不是使用已经提供的东西。
这是什么意思?这意味着您使用/浏览Swing的任何内容都会被Swing绘制并完全处理。相比之下,SWT实际上使用了操作系统的窗口,因此它自然会减少内存使用量并减少自己的工作量。 Swing中的“窗口”并不是真正的“窗口”,它们只是像
答案 1 :(得分:2)
请参阅附件测试显示它在很多情况下都是平局:
http://public.cosylab.com/CSS/DOC-SWT_Vs._Swing_Performance_Comparison.pdf
答案 2 :(得分:2)
Swing使用相当多的内存是真的,但我不认为它是“记忆猪”。
正如一篇回复所说,在Swing中,每个组件都是自己绘制的(不使用操作系统原始小部件),这就是使Swing可以在platforn上移植的原因。
从我的观点来看,Look'n'Feel概念非常好,但它当然有一些缺点(内存消耗)。但我发现这个缺点在很大程度上是因为只用一行代码就可以立即改变应用程序的外观和感觉。有一些第三方look'n'feels(一些商业,一些开源),可以给你的应用程序一些“友好”的外观。
此外,内存使用也起源于JDK(至少6个)在内存中加载(或预加载)类的方式:据我所见,第二个你在代码中运行一些Swing API,即使您可能不需要所有小部件,整个Swing库也会完全加载。这可能会在JDK7(我没有测试过)和“Jigsaw”中发生变化。