Java Swing性能OS X 10.6与Windows 7 这是我第一次到这个论坛,我大约有6个月的java经验,大约1个月的java GUI编程(Swing),所以把我当作java新手。
我开始开发一个简单的2D射击游戏,将Java swing作为一个爱好项目。我使用的是Java 1.6.0_65和Mac OS X 10.6.8、Macbook Pro 2.4 GHz Intel Core 2 Duo(2010年春季型号),显示卡为NVIDIA GeForce 320M 在我的绘制方法中,我使用SwingJava Swing性能OS X 10.6与Windows 7 这是我第一次到这个论坛,我大约有6个月的java经验,大约1个月的java GUI编程(Swing),所以把我当作java新手。,java,performance,macos,swing,user-interface,Java,Performance,Macos,Swing,User Interface,我开始开发一个简单的2D射击游戏,将Java swing作为一个爱好项目。我使用的是Java 1.6.0_65和Mac OS X 10.6.8、Macbook Pro 2.4 GHz Intel Core 2 Duo(2010年春季型号),显示卡为NVIDIA GeForce 320M 在我的绘制方法中,我使用SwingdrawRect()方法绘制了大约30-50个矩形,大小为32*32像素,很少有7*7像素,较小的矩形用fillRect填充。我从计时器回调中每秒调用paintComponent
drawRect()
方法绘制了大约30-50个矩形,大小为32*32像素,很少有7*7像素,较小的矩形用fillRect
填充。我从计时器回调中每秒调用paintComponent()
方法50次
为了了解绘画的速度和速度,我添加了一些测量代码,记录paintComponent()
方法的开始和结束时间,并使用System.nanoTime()方法计算平均持续时间
在OS X 10.6上,每个paintComponent()
的平均执行时间似乎约为3000 usec
我还为Windows7个人电脑(索尼Vaio笔记本电脑、AMD双核2.xGHz和HP笔记本电脑、英特尔四核2.xGHz,现在不记得所有细节)运行了相同的代码。在Windows机器中,平均执行时间只有大约100秒,即大约快30倍
什么能解释如此巨大的差异?System.nanoTime()
能否在Windows 7和OS X之间以不同的分辨率工作,或者在OS X中绘制是否真的那么慢
另一方面,我还测量了游戏引擎非GUI相关部分的平均执行时间(对象移动、碰撞检测等),两个系统上的平均执行时间都在50-100秒之间,因此可能system.nanoTime()
是可靠的,而在OS X中绘制速度真的那么慢吗
编辑:我无法从xCode和Eclipse复制粘贴任何代码,我不断收到关于格式设置的投诉,但您可以查看我为说明此问题而编写的测试应用程序,网址:
这个测试应用程序在Mac上的性能也很慢,大约1400-1800 usec/paint操作。我在Mac上的SWT也有同样的问题。另一个观察结果是,在Mac上,与Windows相反,即使没有双缓冲,也不会有任何闪烁。这可能表明性能不佳的根本原因是操作的安全性增加(它们可能会阻塞,直到垂直刷新,以避免闪烁)。在MacOS X上,基于英特尔图形的内置视网膜显示器的渲染速度似乎很慢。这一点在本文中突出显示。它位于JDK 8补丁40(8u40)中 我在创建2D侧/垂直滚动游戏时也遇到了这个问题,我正在研究Mac上的渲染:
- 约塞米蒂10.10.3
- MacBookPro(视网膜2012年年中)
- 处理器2.7Ghz Intel Core i7
- Java(TM)SE运行时环境(构建1.6.0_65-b14-466.1-11M4716)
JComponent#paintComponent(Graphics)
方法执行渲染,并使用我自己的滚动双缓冲方法,这样我就可以通过对显示设备的Graphics#drawImage()
的一次调用,将准备图像所花费的时间与实际绘制图像所花费的时间区分开来
如果我使用MBP的内置显示器(Intel HD Graphics 4000)绘制图像1680x1500,则需要30ms才能完成
如果我随后切换到外部显示器(NVIDIA GeForce GT 650M),对于相同的代码和相同的图像大小,我得到的时间5msMac SWT
控件
创建强制SWT。双缓冲
打开,无论您指定什么。我发现创建SWTGC
相当慢。