Умножение матриц в Java для двумерной матрицы большого размера - PullRequest
0 голосов
/ 02 марта 2012

В настоящее время я делаю проект по обработке звука, для этого требуется умножить матрицы, которые содержат данные о звуках, т.е. амплитуды, я должен обработать матрицу, в основном выполнять умножение, но количество элементов в матрице слишком велико ... оно приближается к 120000 элементам из 600-килобайтного файла .wav.

Так что, когда я выполняю умножение, это дает мне исключение как ...

Исключение в потоке "main" java.lang.OutOfMemoryError: пространство кучи Java

Пожалуйста, предложите мне решение ...

Ответы [ 2 ]

0 голосов
/ 02 марта 2012

Существует две возможности:

  1. Вы пытаетесь создать большую матрицу случайно. Например, умножение матрицы не является коммутативным, и A*B может иметь очень отличается от размера B*A.Расположение исключения должно дать четкое представление о том, где искать ошибки в вашем коде.
  2. Ваш алгоритм действительно должен создавать огромную матрицу. Есть несколько способов попробоватьи займитесь этим:
    • дайте больше оперативной памяти JVM;
    • вместо того, чтобы хранить всю огромную матрицу в памяти сразу, измените код так, чтобы вы сохраняли только часть его в любой данный моментвремя;
    • попытаться использовать структуру матрицы (например, разреженность).
0 голосов
/ 02 марта 2012

Похоже, вы делаете что-то не так. Довольно часто используется больше памяти, чем в исходном файле данных, но редко требуется более 10 раз (на ум приходят только сжатые изображения)

Я бы посоветовал вам использовать VisualVM, чтобы понять, почему вы используете так много памяти. Вы можете найти проблему, просто взглянув на метод, который вызывает ошибку (то есть посмотрите на трассировку стека)

Скажем, вы должны были использовать 120 000 float для вашей амплитуды, то есть 480 КБ, что будет исправлено на большинстве мобильных телефонов. Кстати: вы делаете это на телефоне?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...