Виртуальная память Java для неоперативной программы? - PullRequest
3 голосов
/ 11 января 2012

Для следующего кода запрета,

public class a {
public static void main(String args[]) throws Exception{
Thread.sleep(100000);
}
}

Если я запускаю его на 64-битной jvm, через "top" я вижу, что он использует виртуальную память 2 ГБ. Что занимает эта виртуальная память? Этот пример может быть странным, но мы видим некоторый производственный код, который использует много виртуальной памяти, так что он превышает ulimit -v

Спасибо Ян

Ответы [ 2 ]

4 голосов
/ 11 января 2012

Виртуальная память не означает, что она фактически выделена и используется. Это просто означает, что в данный момент у него есть много адресов для использования.

0 голосов
/ 11 января 2012

Когда вы запускаете приложение Java, оно при запуске создает кучу (до максимального размера). Размер по умолчанию для последних JVM Sun / Oracle составляет 1/4 вашей основной памяти. Это звучит расточительно, за исключением того, что все это делает резервное адресное пространство. Учитывая, что каждое приложение имеет свое адресное пространство, это не имеет большого значения. (если у вас нет 32-битной JVM с ограниченным адресным пространством)

...