我正在运行一些压力测试,这些压力测试需要创建一堆jframe,并且在创建约25个jframe之后遇到一些严重的性能问题,每个JFrame开始需要5-10秒 / strong>进行创建和处理,这似乎超出了预期。
在运行Mojave和Java jdk1.8.0_111的Macbook Pro上进行了测试
fun main(args: Array<String>) {
fun createFrame(): JFrame {
val frame = JFrame("FrameDemo")
System.out.println("created frame" + frame)
frame.setSize(1000, 600)
frame.isVisible = true
return frame
}
val frames = mutableListOf<JFrame>()
for(i in 0..35) SwingUtilities.invokeAndWait { frames.add(createFrame()) }
for(i in 1..50) {
val start = System.currentTimeMillis()
var frame: JFrame? = null
SwingUtilities.invokeAndWait {
frame = createFrame()
}
System.out.println("started in ${System.currentTimeMillis()-start}")
SwingUtilities.invokeAndWait {
frame!!.dispose()
}
System.out.println("done in ${System.currentTimeMillis()-start}")
}
for(frame in frames)
SwingUtilities.invokeAndWait { frame.dispose() }
}
第一个循环创建了一堆JFrame,以使它们存在,而第二个循环创建+销毁jframe以收集一些性能数字。
如果我注释掉第一个循环,则每个jframe需要O(100ms)来创建+销毁。在第一个循环中,相同的create + destroy操作会花费两个数量级的O(10000ms)。
起初,我以为我可能内存不足,但似乎没有任何GC / CPU压力,并且增加-Xmx
似乎并没有改善这种情况。我的其他指标(例如iops)似乎都没有受到影响,但是我的整个机器确实像蜗牛一样慢。
这是怎么回事?其他非摆动式应用程序(崇高,镀铬等)似乎可以打开许多大窗户,这没有问题,因此我认为这不是机器固有的东西。是否有可以让我避免性能下降的设置?