Mac OS X上的Java 6硬件加速

Mac OS X上的Java 6硬件加速,java,macos,acceleration,Java,Macos,Acceleration,我编写了一个java应用程序,它加载TTF字体并使用Graphics2D中的drawString方法。每50毫秒调用一次,每次更改x和y位置以使文本移动。当我在Windows上运行该程序时,我的CPU使用率为0-1%,但在Mac上,我的CPU使用率约为75%。这台Windows机器确实有更好的CPU,但不可能有这么大的区别。我认为这与硬件加速有关,我想知道如何启用它。我找到了一些,但没有一个能降低我的CPU使用率。有没有关于如何在OS X上提高Java 2D性能的想法?谢谢 EDIT1:我以为这

我编写了一个java应用程序,它加载TTF字体并使用Graphics2D中的drawString方法。每50毫秒调用一次,每次更改x和y位置以使文本移动。当我在Windows上运行该程序时,我的CPU使用率为0-1%,但在Mac上,我的CPU使用率约为75%。这台Windows机器确实有更好的CPU,但不可能有这么大的区别。我认为这与硬件加速有关,我想知道如何启用它。我找到了一些,但没有一个能降低我的CPU使用率。有没有关于如何在OS X上提高Java 2D性能的想法?谢谢

EDIT1:我以为这些属性会有帮助,但它们没有

System.setProperty(“sun.java2d.opengl”,“true”)
System.setProperty(“apple.awt.graphics.UseQuartz”,“true”)
System.setProperty(“apple.awt.graphics.EnableQ2DX”,“true”)

EDIT2:您可以在此处下载项目源代码和字节码:


EDIT3:由于drop.io不再存在,我将项目上载到。现在您无需下载即可浏览代码。我仍然不知道如何解决这个问题,因此非常感谢您的帮助。

在“jvisualvm”中运行探查器以确定时间的流逝。

苹果JVM字体处理是特定于MacOS X的。例如,如果在当前字体中找不到字符的字形,JVM将寻找另一种字体来显示该字符。此外,默认情况下已启用抗锯齿(如果要进行比较,应检查是否已在Windows上启用抗锯齿)。
我并不惊讶苹果的实现使用了更多的CPU。

调用java时可以启用OpenGL

java-Dsun.java2d.opengl=true MyJavaGame

也可以从java应用程序内部启用opengl

System.setProperty("sun.java2d.opengl", "true"); 

不确定这在iOS/Linux/Android上是如何实现的,可能需要更多的研究。

不,但我相当确定这不是计算机。这两台机器都有两个核心DUO:Windows是3.0GHz,Mac是2.0GHz。Windows有2GB内存,Mac有4GB内存。Windows使用集成Intel图形,Mac使用Nvidia 9400m。Windows按预期运行,Mac每次命中率为75%。将刷新时间从50毫秒增加到500毫秒显然不再顺利,Mac的CPU使用率仍在50%左右。你能举个例子吗?请记住,Mac上的JVM是由苹果提供的,而在Windows上,你使用的是另一家供应商(很可能是Sun)的JVM。不同的JVM实现不同的东西,所以这可能是完全“正常”的行为。我知道JVM是由苹果提供的,但我不认为这种情况是“正常”的。我不做任何3D操作,所以图形应该能够很好地处理它。我相信这与默认情况下在Windows上启用硬件加速有关,并且可能隐藏在Mac的某个属性中。我不认为任何人会同意在Core 2 Duo上以75%的CPU使用率运行的简单2D屏幕保护程序是“正常的”。我很快会发布一个示例。苹果有一个非常活跃的邮件列表,可在这里找到:。苹果员工保持着活跃的状态。您的问题很可能在那里找到解决方案。我运行了jvisualvm并在CPU上使用了探查器。这正是我所期望的:draw方法的自时间为89%,第二高的是paint方法(我使用@override),第二高的为7%。这是意料之中的,因为我有一个swing计时器,它每30毫秒调用一次paint方法,对于每次调用paint方法,都会对每个对象调用draw方法,使它们移动两个像素。但是回到我最初的问题,我怎样才能让它像在Windows上那样运行(CPU使用率非常低)?你能做一个我可以在Mac上玩的独立的小例子吗?好的,我做了一个小例子,字母Z在屏幕上移动。结果是相同的:Mac上70-90%的CPU使用率和Windows XP上0-2%的CPU使用率。我看到的行为和你在Core 2 Duo MacBook Pro上看到的一样。对JVM的各种提示并没有提高性能。我现在的猜测是JVM必须转换发送到屏幕上的像素,因此速度会变慢。@I82MORGE:我在原始文章中给出了这个示例@托比约恩·拉文·安德森:谢谢你的关注。我只需要找到一种方法,强制Java使用视频卡来减轻CPU的负担。我在Windows和OS X中都尝试了AA。在这两个操作系统上,AA确实提高了CPU的使用率,但在Windows上从0%增加到5%左右,在OS X上从75%增加到100%左右。就字体无法正常工作而言,我认为这不是问题的一部分,因为字体在两个操作系统上都可以使用。你试过运行代码了吗?我刚在我的Mac上试过(没有字体),我只能确认你写的:75%的CPU,主要由sun.java2D.SunGraphics2D.drawString()使用。我不知道如何改进。恐怕实施过程没有优化。。。在你发布的示例中,我会尝试使用图像缓冲区来避免调用drawString太频繁。我在最初的问题中写到了这一点,并提到它不起作用。该死。我通过软件渲染解决了这个问题。快速切换到一个阵列,并将其用作缓冲图像的源,然后使用nano计时和同步绘制该图像,以使其平滑60帧。