JFrames消耗什么资源?

时间:2019-07-05 15:32:02

标签: java swing kotlin jvm

我正在运行一些压力测试,这些压力测试需要创建一堆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)似乎都没有受到影响,但是我的整个机器确实像蜗牛一样慢。

这是怎么回事?其他非摆动式应用程序(崇高,镀铬等)似乎可以打开许多大窗户,这没有问题,因此我认为这不是机器固有的东西。是否有可以让我避免性能下降的设置?

0 个答案:

没有答案