@DDwrt100

Как положить в лист миллиард объектов?

Добрый день всем.
Сижу мучаю Java, в академических интересах.
Столкнулся с тем , что при попытке положить миллиард чисел в лист, сталкиваюсь с :
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

Сам код простейший.
public class billion {
    public static void main(String[] args){
        ArrayList<Long> s = new ArrayList<Long>(1000000000);
        for(long  i = 0; i< 1000000000;i++){
            s.add(i);
        }

        s.toString();
    }
}


Подскажите пожалуйста , что необходимо поправить в JVM, чтобы выполнить данный код? Среда выполнения IntelIdea.
  • Вопрос задан
  • 195 просмотров
Решения вопроса 3
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Просто вам нужно минимум 64 гигабайта свободной оперативной памяти (если я все правильно посчитал), а по факту раза в четыре больше, так как храним не примитивы, а объекты. Посему, если владеете такой памятью, то ключи для java -Xms128G -Xmx128G
Ответ написан
Комментировать
@acwartz
Тут должна быть ваша реклама.
задать больший размер кучи выделяемой приложению -Xmx = 16GB например. Тогда точно хватит.
Ответ написан
передать ключ -xmg с нужным количеством памяти.
Для миллиарда чисел нужно порядка 8гб памяти, так что выделяйте сразу гигов 16

UPD: Только благодаря Алексею обратил внимание, что используется Long, вместо long.
Тогда памяти будет жраться порядка 170+ гигабайт (если я не просчитался)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Выше правильные ответы. Но зачем вам такой список? Обычно его бьют на подмножества и работают уже с ними. Попробуйте изменить алгоритм так
Ответ написан
402d
@402d
начинал с бейсика на УКНЦ в 1988
https://habr.com/ru/post/312078/
почитайте это статью. Не надо комп ставить в неудобную позу. Лучше писать алгоритм так, чтобы он исходил из доступных ресурсов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы