Общий предел Java массивов?
Я реализую программы, которые имеют около 2 000 000 (2 миллиона) массивов, каждый из которых имеет размер 16 512 (128 x 129) целых чисел. Мне может понадобиться вызывать только 200 массивов одновременно (это 3,3 МБ), но мне интересно, могу ли я расширить программу, чтобы иметь более 2 миллионов (скажем, 200 миллионов), но мне все равно нужно вызывать только 200 массивов одновременно, Итак, каков предел создания большего количества массивов, когда я не использую более 200 массивов одновременно?
Я могу дать больше информации, если нужно, спасибо заранее
3 ответа
Я очень сомневаюсь в этом, если только вы не работаете на 64-битной машине с большим количеством оперативной памяти и очень большой кучей.
Давайте вычислим объем памяти, который вам понадобится для ваших данных:
2,000,000*128*129*8/1024/1024/1024 = 30.8GB.
Вам потребуется дополнительная оперативная память для JVM, остальной части вашей программы и операционной системы.
Похоже, плохо продуманное решение для меня.
Если вы имеете в виду "у меня только 200 массивов в памяти за раз", вы, конечно, можете это сделать, но вам придется перенести остальное во вторичное хранилище или реляционную базу данных. Запросите их, используйте их, соберите их. Возможно, это не лучшее решение, но трудно сказать, основываясь на том, что вы опубликовали.
Обновить:
Означает ли "триггер" "триггер базы данных"?
Да, вы можете хранить их на диске. Я не могу гарантировать, что это будет работать. Ваш жесткий диск может обрабатывать 30 ГБ данных; вполне возможно, что он будет вмещать 300 ГБ, если он достаточно большой.
Просто помните, что вы должны думать о том, как вы будете управлять оперативной памятью. GC молотить может быть проблемой. Хорошим решением для кэширования может быть ваш друг здесь. Не пиши себе.
Что произойдет, если этот жесткий диск выйдет из строя и вы потеряете все эти данные? Вы поддерживаете это? Может ли ваше приложение быть недоступным в случае сбоя диска? Подумайте и об этих сценариях. Удачи.
Пока вы увеличиваете максимальный размер кучи, чтобы убедиться, что вашему приложению не хватает памяти, у вас все будет хорошо.
Пока вы не храните ссылки на массивы, в которых вы больше не нуждаетесь, жестких ограничений нет. Старые массивы будут автоматически собирать мусор, поэтому вы можете продолжать выделять и оставлять массивы практически до бесконечности.
Конечно, существует ограничение на количество массивов, которые вы можете хранить в любой момент времени. Это ограничено объемом памяти, доступной для JVM.