Java2D / Graphics2D 性能

Posted

技术标签:

【中文标题】Java2D / Graphics2D 性能【英文标题】:Java2D / Graphics2D performance 【发布时间】:2012-05-14 19:57:43 【问题描述】:

也许有人在这方面花了很多时间。我正在使用 Java 开发图形可视化库,我刚刚做了一些性能测试。

当我添加由 1000 到 3000 条边连接的大约 2000 个顶点时,它变得非常非常慢。有一些工具做得更好(例如gephi)。他们是怎么做到的? Java2D硬件不是默认加速的吗?我必须使用一些 OpenGL 库吗?

我在 JComponent 中绘制图表,它每隔几毫秒由计时器重绘一次(没关系,如果我给它 100 毫秒或 1 毫秒,它会保持非常慢)。

我的方法有缺陷还是不应该为此使用 Java2D?

感谢您的帮助!

【问题讨论】:

您是否正式分析过您的代码,以便知道渲染是您的瓶颈?如果没有,我会先做这个。 永远不要重绘所有内容。是不可能的。尽可能缓存。 @Hovecraft:我会在星期一回来后尽快完成。 @J-16:当一切都在移动并且可见时,我应该如何缓存一些东西?例如。被力导向布局算法放置/移动 试试看。 BufferedImage 不是硬件加速的 afaik,而 VolatileImage 是(如果可用)。 【参考方案1】:

正如 Torious 建议的那样,如果您使用 Java2D 来获得硬件加速的好处,您可能希望使用 VolatileImage。

但是 - 如果您想要绝对的最佳性能,您最好选择基于 OpenGL 的解决方案。

LWJGL (http://lwjgl.org/) 专为游戏而设计,但允许您使用几乎所有相关的 OpenGL 功能,因此也非常适合可视化。可能值得一试!

【讨论】:

以上是关于Java2D / Graphics2D 性能的主要内容,如果未能解决你的问题,请参考以下文章

如何用 Java2D 绘制内部笔画

使用Java2D改善API绘制效果

《Java游戏编程原理与实践教程》读书笔记(第3章——Java图形处理和Java 2D)

java实现时钟

java 父类向子类转型的问题

Java2D:XWindows 事件和帧率之间的交互