我在java中创建自定义界面屏幕。该界面屏幕的一部分采用给定的图像,然后随机地将其切割成给定数量的部分,然后在屏幕上轻微移动它们。在其顶部绘制了一个覆盖图,其中显示了下面发生的大部分内容。这显然非常低效,因为被绘制的大部分内容都无法看到(我认为)它导致界面屏幕在首次启动时暂停。我修改了代码,以便只绘制通过叠加层可以看到的部分,期望这可以解决启动时减速的问题,但事实并非如此。
当我打印出绘制循环的时间时,前三次是高的:大约500ms,然后是300ms,然后是20ms,其余时间是其余的16ms(或60 fps)。
还有什么可能导致一开始放慢速度吗?有可能java以某种方式优化我的绘图在那些前1000个左右的ms中,以便它可以在16ms运行剩下的时间吗? (就像意识到某些被绘制的内容无法被看到然后进行优化所以实际上并没有每次更新都被绘制出来) - 我真的不知道我有什么想法会导致这种情况。
我已经彻底检查过以确保在更新开始后没有加载任何对象/线程/资产,这是我唯一能想到的。
非常感谢任何帮助。
答案 0 :(得分:0)
Java中的许多循环都是这样的。这是因为JVM可以以两种形式存储和运行代码:慢字节码或快速本机代码。字节码是默认值,因为创建本机代码很昂贵。当程序执行时,JVM收集有关程序部分的信息,这些信息值得转换为本机代码;这被称为及时编译代码。因此,当您的程序执行时,它会更快。