Массив с 500 миллионами элементов имеет размер 2 ГБ, что & ndash; в зависимости от используемой операционной системы & ndash; обычно это максимум, на который может обратиться процесс. Другими словами: ваш массив больше, чем ваше адресное пространство.
Итак, решения очевидны: либо уменьшите массив (скажем, разбив его на куски), либо увеличьте адресное пространство (в Linux вы можете исправить ядро, чтобы получить 3, 3,5 и даже 4 ГБайта адресного пространства и, конечно, переключение на 64-битную ОС и 64-битная реализация Ruby (!) также будет работать).
Кроме того, вам нужно переосмыслить свой подход. Может быть, использовать mmap
вместо массива или что-то в этом роде. Может быть, ленивая загрузка только тех частей, которые вам нужны.