【问题标题】:Fast memory manipulation in Java?Java中的快速内存操作?
【发布时间】:2011-12-20 20:48:37
【问题描述】:

我是 Java 的新手(之前在嵌入式平台上使用过 C 语言),所以如果这个问题非常琐碎,请原谅我。

我需要用 Java 实现一些信号处理算法。我知道 Java 可能不是做到这一点的最佳语言 [1],但 Java 需求的出现主要是因为我团队的其他成员根本不熟悉 C。

我们需要做的是读取一些包含视频帧的文件,处理它们(收集一些关于它们的统计信息),然后将它们写回磁盘。处理将涉及读取几 kB 的数据并以某种方式解析它们,可能需要进行某种转换。即,我希望我们需要进行 lot 字节寻址的随机内存访问。而且我需要每秒执行大约 30 帧,每帧执行数万次此类操作(因此可能每秒执行 100 次或 1000 次操作)

我不太了解 Java 的“内部结构”,但根据我的阅读,我相信 Java 看到的内存与操作系统本身提供的实际虚拟内存 [2] 相去甚远。

我应该使用哪些缓冲区管理库才能获得最佳性能?我见过一些(NIO [3]、Java 2d [4] 等),但我无法找到哪个更快,或者我是否缺少任何其他选项。你们对我有什么建议或指点[5]?

我还会做很多算术,那么有没有可以做“更快”算术的库?我来自一个可以加速硬件上几乎所有东西的世界,但现在我需要在 PC 上运行它,所以我不确定是否有任何这样的选项可用。

如果你们能提供任何其他建议或帮助,我们将不胜感激!

【问题讨论】:

  • 问题是,Java 中的大多数信号处理看起来几乎与 C 相同,因为它几乎不可避免地会以过程风格实现。我不知道为什么你的同事会这么害怕这个。去掉对象,Java 开始看起来很像 C。
  • [2] 这是正确的。 JVM 维护自己的内存并具有一些相当高性能的垃圾收集算法。它还进行了很多动态优化,因此我建议您编写算法并对其进行分析以评估您的性能瓶颈。
  • @MarkPeters 是的,这是真的——我想它比其他任何东西都更具惯性。
  • 我找到了一个链接,它更详细地解释了 NIO 的一些细节 - 我认为它可能会有所帮助:cs.brown.edu/courses/cs161/papers/j-nio-ltr.pdf
  • 公平地说,如果您的团队作为一个整体对 C 编程语言不满意,那么该团队有哪些业务来实现信号处理算法?小组在开发这个项目时学习 C 是值得的。

标签: java math io buffer signal-processing


【解决方案1】:

【讨论】:

  • 好的,这些链接中的大多数似乎表明 NIO 的 MappedByteBuffer 是可行的方法,所以我想我会尝试一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2017-10-19
相关资源
最近更新 更多