Исключение OutOfMemory

Если вам нужна пользовательская страница с ошибкой, вы можете сделать следующее: в ваших библиотеках создайте имя файла MY_Exceptions и расширьте его с помощью CI_Exceptions . Затем переопределите функцию show_404 () ]. В этой функции теперь вы можете создать экземпляр вашего класса Controller с помощью функции & amp_ get_instance (). И с помощью этого экземпляра вы можете загрузить свою пользовательскую страницу 404 Error.

class MY_Exceptions extends CI_Exceptions {

public function __construct(){
    parent::__construct();
}

function show_404($page = ''){ // error page logic

    header("HTTP/1.1 404 Not Found");
    $heading = "404 Page Not Found";
    $message = "The page you requested was not found ";
    $CI =& get_instance();
    $CI->load->view('/*Name of you custom 404 error page.*/');

}
5
задан Brian Deragon 12 December 2011 в 17:54
поделиться

4 ответа

Исключение OutOfMemory происходит всякий раз, когда вызов любой из следующих инструкций MSIL завершается с ошибкой

  1. newobj
  2. newarr
  3. box

В основном это операции которые выделяют новую память в куче, в вашем случае Stream.ReadToEnd, по-видимому, выделяет массив байтов внутри для загрузки потока в память, поэтому, если файл достаточно велик, чтобы прервать процесс, он выдаст это исключение.

7
ответ дан 13 December 2019 в 05:37
поделиться

Либо вы используете больше памяти, чем доступно приложению. В этом случае вам нужно будет решить, как сделать использование памяти более эффективным. Может потребоваться использование файлов / базы данных для хранения данных, которые вы не используете немедленно ..

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

Если вы используете C # или .Net, вы можете использовать профилировщик CLR для анализа вашей памяти, чтобы посмотреть, как это используется. Профилировщик CLR

2
ответ дан 13 December 2019 в 05:37
поделиться

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

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

Во втором случае, фрагментация кучи, вы пытаетесь создать объект, который больше, чем самый большой непрерывный фрагмент памяти в куче. Это случается реже, но в некоторых случаях обязательно. Обычная куча будет сжиматься во время запуска gc, а куча больших объектов - нет.

В MSDN есть хорошая статья о куче больших объектов.

Правка: Я вспомнил другой способ получить недостаточно памяти. Вы можете попробовать создать объект размером более 2 ГБ. Это максимальный размер объекта в.

2
ответ дан 13 December 2019 в 05:37
поделиться
  1. Допустим, у вас есть максимум 10 МБ памяти для использования в вашем приложение. Вы создаете новый список и добавляете к нему экземпляры объектов. Позволять' Теперь говорят, что каждый экземпляр объекта «весит» 1 МБ. Таким образом, первые 10 экземпляров будут добавлены без проблем, но 11-й экземпляр вызовет исключение OutOfMemoryException, так как после первых 10 экземпляров вы использовали всю выделенную память (10 МБ).

  2. Сборщик мусора ищет «мусор», экземпляры, которые не будут использоваться - которые НЕ МОГУТ использоваться, поскольку никакие другие экземпляры не указывают на них. Если, например, есть член экземпляра типа List с содержащими экземплярами, GC не будет собирать ни список, ни его экземпляры. Продолжайте добавлять экземпляры в список с помощью OutOfMEmory Exception.

Используйте следующие аргументы vm, если вы хотите / должны увеличить память, используемую вашим приложением: Java youAppName -Xms128m -Xmx512m

1
ответ дан 13 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: