Ошибка, пространство кучи Java при зацикливании массива bigInteger

Я хочу, чтобы в моем массиве было 5 случайных значений.

Сначала я попрошу ввести значение. значение может быть от 1-∞.

Я понял, что проблема с кодом состоит в том, что, если я введу значение>= 500000, программа начнет выдавать ошибку пространства кучи. Как я могу решить это?

public static void main(String[] args) {
    BigInteger p;
    p = readBigInteger("Enter a value ");
    ArrayList<BigInteger> list = new ArrayList<BigInteger>();

    for (BigInteger bi = BigInteger.valueOf(1); bi.compareTo(p) <= 0; bi = bi.add(BigInteger.ONE)) {
        list.add(bi);
    }
    Collections.shuffle(list);

    for (BigInteger bi = BigInteger.valueOf(1); bi.compareTo(new BigInteger("5")) <= 0; bi = bi.add(BigInteger.ONE)) {
        Integer a = bi.intValue();
        System.out.println(list.get(a));
    }
}   

2 ответа

Решение

По сути, вы создаете столько объектов BigInteger, сколько вводит пользователь. Таким образом, если пользователь предоставил 500000 в качестве входных данных, будет очень много BigIntegers. Они занимают место в куче вашей программы (куча - это хранилище всех ваших объектов). Проблема в том, что это хранилище ограничено, и JVM отменит вашу программу, если не осталось места. Вы можете попробовать увеличить кучу с помощью команды JVM. Но вам действительно нужно хранить все эти BigIntegers? Возможно нет.

Итак, вы хотите получить 5 случайных чисел в указанном диапазоне? Используйте метод здесь и назовите его 5 раз.

Другие вопросы по тегам