Пространство подкачки, файлы JVM и карты памяти (nio) - PullRequest
1 голос
/ 10 января 2012

Недавно я прочитал статью, в которой утверждается, что при отображении файлов в память пространство подкачки сохраняется.

Вопрос 1: Почему это значительное преимущество?

То есть, чтобы уточнить, я бы поставил такой вопрос:

Вопрос 2: Если у меня есть JVM, работающая с (скажем) 1G или RAM в стандартном дистрибутиве Linux, и я открываю файл размером 800 МБ - какой процент памяти JVM будет занимать пространство подкачки?

И, кроме того, каковы другие ресурсы, которые файл будет использовать?

Я думаю, настоящий вопрос, который я задаю, это:

Вопрос 3: Как мы определяем «пространство подкачки» при работе с большими файлами, читаемыми JVM, и каковы основные (неочевидные) преимущества Файлы, отображаемые в память, предоставляют приложению (т. Е. Когда они идеальны замены обычному старому файловому потоку)?

Я предполагаю, что это связано с тем, как подкачка реализована с помощью сопоставления памяти файла JVM.

1 Ответ

5 голосов
/ 10 января 2012

Вопрос 1: Почему это значительное преимущество?

Я полагаю, это относится к разделу подкачки.Если вы используете кучу или прямую память, ее можно поменять местами.Это очень плохая идея с точки зрения производительности, но это может произойти.Файлы с отображенной памятью разбиваются на эти файлы.

ИМХО экономия места подкачки не такая уж большая проблема, но это означает, что вам не нужно перенастраивать систему, потому что ваше приложение хочет использовать многовиртуальной памяти.

Вы никогда не хотите, чтобы ваша куча была перенесена на диск.

Вопрос 2: Если у меня есть JVM, работающая с (скажем) 1G или RAM на стандартномДистрибутив Linux, и я открываю файл размером 800 МБ - какой процент памяти JVM будет занимать пространство подкачки?

Файлы с прямой памятью и отображенной памятью не учитываются в вашей куче.Если ваша куча использует почти 1 ГБ, а максимальная - 1 Г, вы можете открыть файл размером 800 МБ.Ни в том, ни в другом случае не будет использоваться пространство подкачки.

Вопрос 3. Как определить «пространство подкачки» при работе с большими файлами, читаемыми JVM, и каковы ключевые (неочевидные) преимущества памятисопоставленные файлы?

Я не знаю точно, что вы подразумеваете под пространством подкачки.Возможно, вы могли бы определить, что для вас означает пространство подкачки.

Основное преимущество файлов, отображаемых в память, заключается в том, что вы можете использовать большой объем данных и позволить ОС беспокоиться о том, какие части считать или записать на диск.Область может быть намного больше, чем физическая память, и даже больше, чем объем дискового пространства.

Пример отображения файла 8 ТБ в память Java http://vanillajava.blogspot.com/2011/12/using-memory-mapped-file-for-huge.html

...