Akshit11 Ответов: 2

Как я могу хранить 10pow9 количество целых чисел в массиве.


Я должен хранить 10pow9 количество целых чисел. Когда я попытался сохранить его в массиве, он выдает ошибку времени выполнения. Так что же я должен использовать вместо массива, чтобы избежать ошибки во время выполнения.

Что я уже пробовал:

Я попытался объявить массив глобально, но это не работает.

Dave Kreskowiak

Итак, вы хотите сохранить 1 000 000 000 целых чисел? 32-битные или 64-битные целые числа? 32-битным потребуется более 4 ГБ оперативной памяти, в то время как 64-битным целым числам потребуется вдвое больше.

Это звучит как плохая идея, в зависимости от того, что вы делаете.

Akshit11

Да, тогда каким же должен быть альтернативный способ хранения этого числа целых чисел?

Я новичок в программировании, поэтому, пожалуйста, помогите.

Dave Kreskowiak

Я новичок в программировании,

Именно это заставляет меня задаться вопросом, почему вы думаете, что вам нужно хранить миллиард точек данных в памяти.

Patrice T

Похоже, это неправильное решение другой проблемы.
Вам нужно объяснить проблему, чтобы получить советы.

Akshit11

Спасибо за вашу помощь.

2 Ответов

Рейтинг:
4

Jochen Arndt

Java поддерживает массивы с 1 миллиардом элементов. Но такой массив будет потреблять 4 ГБ памяти, что, вероятно, выше максимального размера кучи по умолчанию, который зависит от версии ОС и Java, а также доступного объема памяти.

Вы можете установить максимальный размер кучи с помощью -Xmx вариант. Но он не должен превышать объем доступной памяти. Так что вы можете попробовать например -Xmx5g если в вашей системе установлено не менее 8 ГБ оперативной памяти. Смотреть также Настройка Виртуальных Машин Java (JVMs)[^].


Akshit11

Большое спасибо за вашу помощь.Я понял, что вы говорите, должен быть какой-то другой подход к этому.

Jochen Arndt

Спасибо, что приняли мое решение.

Если у вас недостаточно оперативной памяти единственное решение это те которые упомянуты в другом ответе:
Сохраните данные в файле и используйте класс RandomAccessFile для чтения, записи и поиска (установите положение в файле).

Рейтинг:
19

OriginalGriff

Это не столько вопрос "как мне это сделать?", сколько "почему вы пытаетесь это сделать?"
Даже в виде 32-битных целых чисел (как говорит Дейв) это 4 ГБ данных, что является впечатляющим количеством для одного объекта. А если это мобильное приложение (что вполне возможно, учитывая, что это Java, которая в основном используется для Android) Я бы сказал, что лучшее, что вы можете сделать, - это посмотреть на свое приложение и почему ему нужен случайный доступ к такому количеству данных!

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

Я, конечно же, не стал бы начинать с разработки системы, которая нуждалась бы в массиве 4 ГБ, не исследуя сначала другие пути!


Akshit11

Большое спасибо за вашу помощь.Я понял, что вы говорите, должен быть какой-то другой подход к этому.

OriginalGriff

Всегда пожалуйста!