Виртуальная память действительно не имеет значения для вас.
Основное различие между 32-битной и 64-битной версиями заключается в том, что адресное пространство в 64-битной системе невероятно велико. Если 10 ГиБ кажутся вам много, обратите внимание, что .NET на 64-разрядной версии может использовать такие ТиБы памяти. Тем не менее, в 32-разрядной среде .NET гораздо более консервативен (как и JVM) — адресное пространство составляет всего 4 ГБ — это немного.
Но это не имеет значения - это не имеет значения. Это просто вещь, которая значительно упрощает программирование и не оказывает никакого негативного влияния на основную ОС. Он создает непрерывное адресное пространство для использования виртуальной машиной, а это означает, что вам не нужно фрагментировать кучу (или, что еще хуже, стек, где это более или менее невозможно, но это, как правило, только МиБ или около того) как вам потребуется больше «настоящей» памяти. Когда вы, наконец, выделяете виртуальную память, она становится немного более реальной — в этот момент она более или менее должна поддерживаться некоторым хранилищем данных — будь то файл подкачки (подкачки) или физическая оперативная память.
Дело в том, что физическое расположение памяти не обязательно является непрерывным, но это делается за пределами вашей досягаемости, и отображение, как правило, очень быстрое. С другой стороны, необходимость, скажем, индексировать массив, который на самом деле фрагментирован более чем на 10 различных блоков памяти виртуальных адресов, это (совершенно ненужная) работа.
Итак, у вас есть это - виртуальная память почти свободна на 64-битной версии. Основной подход — «если он есть, используйте его». Вы не ограничиваете другие приложения, и это сэкономит вам немало работы, если вы делаете на самом деле в конечном итоге используете его. Но пока этот момент не наступил, у вас есть только оговорка. Это вообще не переводится ни в какую физическую память. Вы не платите за друзей, которые могут прийти сегодня вечером и сесть за ваш стол, но у вас все еще есть место для них, если они придут, и только когда они наконец придут, вы действительно получите «заряд».
См. этот вопрос для получения дополнительной информации о том, как Java ведет себя на разных машинах и в разных версиях: Каков максимальный размер кучи по умолчанию для JVM Sun из Java SE 6? Максимальный размер кучи также определяет объем зарезервированной виртуальной памяти, поскольку куча должно быть непрерывное адресное пространство. Если бы он не был предварительно зарезервирован, могло бы случиться так, что куча не смогла бы расшириться до этого максимального значения, потому что кто-то еще зарезервировал область адресного пространства в том месте, где куча должна расширяться.
person
Luaan
schedule
29.04.2014