Я провожу некоторые стресс-тесты, которые требуют создания нескольких jframes, и сталкиваюсь с некоторыми серьезными проблемами с производительностью после того, как ~ 25 jframes были созданы, это начинает занимать 5-10 секунд на JFrame для создания и утилизации, что выглядит ужасно за пределами ожиданий.
Протестировано на Macbook Pro под управлением Mojave и Java jdk1.8.0_111
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() }
}
Первый цикл создает группу JFramesпросто так они существуют, и второй цикл создает + разрушает jframes для сбора некоторых номеров производительности.
Если я закомментирую первый цикл, то каждый jframe берет O (100 мс), чтобы создать + уничтожить.В первом цикле та же самая операция создания + уничтожения занимает на два порядка больше времени O (10000 мс).
Сначала я подумал, что, может быть, у меня заканчивается память, но там, похоже, нетДавление ГХ / ЦП и увеличение -Xmx
не улучшат ситуацию.Ни одна из моих других метрик (например, iops), кажется, не затронута, но вся моя машина чувствует себя медленной, как улитка.
Что здесь происходит?Другие не качающиеся приложения (sublime, chrome и т. Д.), Кажется, могут открыть много больших окон без проблем, поэтому я не думаю, что это что-то присущее машине.Есть ли настройка, которая позволит мне избежать обрыва производительности?