Как получить серийный номер жесткого диска в Linux, используя C или Java? [Дубликат]

OutOfMemoryError - это исключение, созданное виртуальной машиной Java (JVM), потому что ему необходимо выделить память для (нового) объекта, но для объекта недостаточно памяти. JVM сначала попытается освободить память, используемую мертвыми объектами, запустит сборщик мусора .

Поскольку OutOfMemoryError является VirtualMachineError, JVM разрешено бросить его в любое время , хотя он должен попытаться освободить память через сборку мусора в первую очередь .

Однако на практике это, скорее всего, будет выбрано из new, который пытался создать объект, для которого память не может быть выделена. Таким образом, вы должны сначала изучить stacktrace, связанный с исключением, для подсказки о причине проблемы, , как и для любого другого исключения .

  • Если исключение из-за попытки выделить массив (например, int[] values = new int[n]) причиной может быть то, что вы пытаетесь создать слишком большой массив (слишком большой размер n). Вы ошиблись при вычислении размера массива, который вам нужен?
  • Если исключение выбрано из попытки выделить массив в методе класса контейнера, написанном кем-то другим, причина может быть что ваш код просит контейнер хранить чрезмерное количество вещей. Такие методы, как ArrayList.reserve(int) и HashMap(int), должны выделять хранилище для будущего использования. Вы допустили ошибку при вычислении размера контейнера, который вам нужен?
  • Если исключение выбрасывается из цикла, причиной может быть то, что код слишком много циклов. Правильно ли установлено условие завершения цикла? Если это for цикл, вы просите его зациклировать правильное количество раз?

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

JVM имеет конечный объем памяти , доступный для него. Вы можете сделать вывод, что программа работает правильно, но для этого требуется больше памяти для работы, чем было доступно для нее. Если вы явно не укажете JVM, сколько памяти использовать, большинство реализаций выберет разумную величину по умолчанию в зависимости от объема оперативной памяти, которую имеет ваш компьютер, но эта сумма может быть слишком мала для вашей программы , Параметры командной строки для JVM могут управлять объемом памяти. Для большинства реализаций JVM наиболее важными из них являются -Xmx и -Xms.

0
задан mik 25 February 2015 в 19:03
поделиться