Java 8u40 Swing GUI性能

Java 8u40 Swing GUI性能,java,swing,user-interface,Java,Swing,User Interface,我有一个展示非常复杂的Swing GUI的应用程序。GUI总共包含大约60000个不同的控件(大部分是标签,较少的文本字段)。基本上,它是一个表,其中许多单元格中的每个单元格都包含一个独立的控件,该控件没有几个标签和一个文本框 我突然遇到的问题与8u40之后(包括8u40)的java版本有关。该项目是使用JDK8U122构建的。当我使用Java8U31运行我的应用程序时,一切都很顺利。当我使用超过8u31的任何Java(JRE)运行我的应用程序时,应用程序开始呈现我复杂的控件,然后很快就需要10

我有一个展示非常复杂的Swing GUI的应用程序。GUI总共包含大约60000个不同的控件(大部分是标签,较少的文本字段)。基本上,它是一个表,其中许多单元格中的每个单元格都包含一个独立的控件,该控件没有几个标签和一个文本框

我突然遇到的问题与8u40之后(包括8u40)的java版本有关。该项目是使用JDK8U122构建的。当我使用Java8U31运行我的应用程序时,一切都很顺利。当我使用超过8u31的任何Java(JRE)运行我的应用程序时,应用程序开始呈现我复杂的控件,然后很快就需要100%的CPU,所有这些都会阻塞,我必须杀死我的应用程序

为什么?我正在检查8u40的补丁说明,但我找不到任何可能导致如此大减速的东西


你有什么想法吗?

这似乎与我使用的
-XX:-UseAptiveSizePolicy
VM参数有关

如果没有它,即使在较新的Java版本上也能正常工作


现在,有这么多控件,我需要
-XX:-useAptiveSizePolicy

您有权访问探查器吗?在这种极端情况下,探查器可能会引导您找到正确的方向来查明问题。您是指JProfile吗?我尝试了“VisualVM”,但一旦CPU使用率达到100%,VisualVM也会变得无响应。我还检查了测试版,u155和同样的事情发生。进一步检查,我偶然发现了这个未解决的错误。也许这与。。。JProfiler、YourKit、VisualVM,有许多Java分析器可用。这个bug是关于JavaFX的,您可以编写一个Swing UI。如果探查器没有响应,这通常是由于在已分析的应用程序中正在进行垃圾收集(停止world阶段)。您可以尝试进行一些GC日志记录,看看这是否是问题所在。或者在8u31和8u40+没有响应之前比较一下它们的内存使用情况。“GUI总共包含大约60000个不同的控件(大部分是标签,较少的文本字段)。”也许你应该重新设计应用程序。仅包括有限数量的控件。“基本上,它是一个表格……”你是说一个
JTable
?如果操作正确,将拥有(最多)与列数量相同的控件。他们使用“flyweight模式”来渲染类似于
JTable
的内容,这意味着每行都将使用一个控件来渲染该单元格。(很久以前)我记得非常类似的问题(
>Java6_25
我很困惑,首先你说它在没有它的情况下工作,然后你说你需要它。现在它是什么?自定义控件在没有它的情况下工作,但需要1GB的RAM:)使用VM参数(在Java8U40之前工作正常)应用程序将内存消耗保持在350MB左右