java中的矩阵乘法用于大尺寸二维矩阵

时间:2012-03-02 16:06:19

标签: java audio matrix

我目前正在进行声音处理项目,因此需要将矩阵乘以包含声音数据的矩阵,即。幅度,我必须处理矩阵,主要执行乘法,但矩阵中的元素数量太高...它接近600kb .wav文件中的大约120000个元素。

所以当我执行乘法时,它给了我一个例外......

线程“main”中的异常java.lang.OutOfMemoryError:Java堆空间

请建议我一个解决方案......

2 个答案:

答案 0 :(得分:0)

听起来你做错了什么。使用比原始数据文件更多的内存是很常见的,但它很少需要超过10倍(只有压缩的想象才会浮现在脑海中)

我建议您使用VisualVM来查看为什么要使用这么多内存。您可以通过查看触发错误的方法(即查看堆栈跟踪)来找到问题

假设您使用120,000 float作为振幅,即480 KB,可以修复大多数手机。顺便说一句:你是用手机做的吗?

答案 1 :(得分:0)

有两种可能性:

  1. 您试图偶然创建一个大型矩阵。例如,矩阵乘法不是可交换的,A*B非常大小不同于{{ 1}}。异常的位置应该为您在代码中查找错误的位置提供强有力的线索。
  2. 您的算法确实需要创建一个巨大的矩阵。有几种方法可以尝试解决这个问题:
    • 为JVM提供更多内存;
    • 不是一次将整个巨大的矩阵存储在内存中,而是更改代码,以便在任何给定时间只存储其中的一部分;
    • 尝试利用矩阵的结构(例如稀疏性)。