Ошибка, пространство кучи Java при зацикливании массива bigInteger
Я хочу, чтобы в моем массиве
Сначала я попрошу ввести значение. значение может быть от 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 раз.