Создание ошибки «не удалось зарезервировать достаточно места для кучи объекта» - PullRequest
2 голосов
/ 04 мая 2010

Существует ли утилита (для Windows), которая использует память, чтобы я мог создать JVM "не удалось зарезервировать достаточно места для кучи объектов"?

Я хочу использовать эту память в процессе вне JVM.

Ответы [ 5 ]

7 голосов
/ 04 мая 2010

Просто используйте флаг -Xms

java -Xms3g org.foo.Main

В приведенном выше примере мы попытаемся создать начальный размер кучи в 3 ГБ, просто измените число так, чтобы оно превышало общий объем памяти вашей системы (физической и виртуальной)

0 голосов
/ 04 мая 2010

Вот небольшая C-программа, которая будет использовать количество байтов, указанное в командной строке:

#include <stdlib.h>
int main(int argc, char *argv[]) {
  int bytes = atoi(argv[1]);
  char *buf = malloc(bytes);
  while (1) {
    int i;
    for (i = 0; i < bytes; i++) buf[i] += 1;
  }
}
0 голосов
/ 04 мая 2010

Вы можете использовать произвольный объем памяти, запустив несколько скриптов, которые выглядят так:

public static void main(String[] args)
{
    List<String> l = new ArrayList<String>();
    for (long i = 0 ; i < 100000000l ; i++)
    {
        l.add(new String("AAAAAAA"));
    }
}

С достаточно большим пространством кучи (например, -Xmx1024M). Проблема заключается в том, что любая современная ОС будет пытаться использовать виртуальную память, чтобы приложение продолжало функционировать, что приведет к тому, что ваш жесткий диск будет работать быстрее, а не исчерпывать память для JVM. Возможно, вам придется установить общее пространство подкачки ОС на что-то фиксированное, чтобы действительно встретить этот сценарий.

0 голосов
/ 04 мая 2010
List<Object> leak = new ArrayList<Object>();
while(true) {
    leak.add(new Object());
}
0 голосов
/ 04 мая 2010

Я думаю, вы можете попробовать это:

String s = "b";
for (int i = 0; i < 1000 000; i++) {
  s+="b";
}

Поскольку новая строка будет выделяться при каждом запуске строки s + = "b", в ней должна заканчиваться куча java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...