execvp
принимает массив указателей. Вы даете ему 2D-массив. Это совершенно разные звери. Для начала массив указателей, задаваемых execvp
, должен быть NULL
-определенным. С 2D-массивом это невозможно.
Много JVMs никогда не возвращают память операционной системе. Делает ли это так или не является определенным для реализации. Для тех, которые не делают, пределы памяти, указанные при запуске, обычно через флаг-Xmx, являются основными средствами, чтобы зарезервировать память для других приложений.
Мне нелегко находить документацию относительно этого предмета, но документация сборщика "мусора" для Java 5 Sun действительно обращается к этому, предполагая, что при правильных условиях, "куча" уменьшится, если корректный коллектор будет использоваться — по умолчанию, если больше, что 70% "кучи" свободны, она уменьшится так, чтобы только 40% были свободны. Параметры командной строки для управления ими -XX:MinHeapFreeRatio
и -XX:MaxHeapFreeRatio
.
Существует несколько параметров командной строки для JVM, которые помогают настроить размер "кучи", используемой Java. Все знают (или должен знать) о-Xms и-Xmx, которые устанавливают минимум и максимальный размер "кучи".
Но существует также-XX:MinHeapFreeRatio и-XX:MaxHeapFreeRatio, которые являются соответствующими пределами, между которыми JVM управляет свободным пространством. Это делает это путем уменьшения используемой "кучи", и это может понизить потребление памяти программы.
Можно найти больше информации здесь:
Необходимо использовать определенного для JVM профилировщика для контроля фактического пространства "кучи", используемого программой в противоположность памяти, выделенной JVM.
JVM только не отказывается освободить память "кучи", которую она выделила, но имеет тенденцию проглатывать пространство по разным причинам, включая своевременную компиляцию.
ОС, возможно, показывающая память, которая в настоящее время выделяется программе - Даже при том, что 150 ~ МБ выделяются, это не означает, что 150 ~ МБ используются.