Поэтому при создании двойного списка или списка int я использую его коробочный тип «Double». "
или "Целое число". (например, List, List)
скомпилировал и запустил программу.
через несколько мгновений программа выдает OOME.
Что происходит включен?
Размер double составляет 8 байт, но для класса размер «по умолчанию» составляет 12 байт.
(Double — 16 байт)
Потому что Размер массива очень велик (не менее 1 000 000 000), я должен выделить много места в памяти и гарантировать, что пространство не будет потрачено зря.
Я хочу хранить как можно больше элементов, используя как можно меньше памяти.
Он может выделить массив, но недостаточно места для выделения списка.
есть ли как это заменить?
Вот мой код для реализации этой проблемы.
Код: Выделить всё
public static void main(String[] args){
int approxLength = 2000000000; //unknown
long cnt = 0;
Random random = SecureRandom.getInstanceStrong();
int length = approxLength;
List d1 = new ArrayList();
for (int index = 0; index < length; index++) {
d1.add((double)index);
cnt++;
if (cnt % 1000000 == 0) {
System.out.println(cnt);
}
}
System.out.println(d1.get(random.nextInt(d1.size())));
}
Я также пробовал это с LinkedList, но программа остановилась работает на 356 000 000-й итерации.
Код: Выделить всё
public static void main(String[] args){
int approxLength = 2000000000; //unknown
long cnt = 0;
Random random = SecureRandom.getInstanceStrong();
int length = approxLength;
double[] d1 = new double[approxLength];
for (int index = 0; index < length; index++) {
d1[index] = index;
cnt++;
if (cnt % 1000000 == 0) {
System.out.println(cnt);
}
}
System.out.println(d1[random.nextInt(d1.length)]);
}
Моя цель — создать два массива примерно 700 000 000 элементов.
Подробнее здесь: https://stackoverflow.com/questions/791 ... s-possible
Мобильная версия