Свойство конфигурации называют hibernate.hbm2ddl.auto
В нашей среде разработки, которую мы устанавливаем hibernate.hbm2ddl.auto=create-drop
, чтобы отбросить и создать чистую базу данных каждый раз, когда мы развертываемся, так, чтобы наша база данных была в известном состоянии.
В теории, можно установить hibernate.hbm2ddl.auto=update
для обновления базы данных с изменениями в модели, но я не положил бы этому на производственной базе данных. Более ранняя версия документации сказала, что это было экспериментально, по крайней мере; я не знаю текущего статуса.
Поэтому для нашей производственной базы данных, не устанавливайте hibernate.hbm2ddl.auto
- значение по умолчанию не должно вносить изменения базы данных. Вместо этого мы вручную создаем сценарий обновления DDL SQL, который применяет изменения от одной версии до следующего.
Попробуйте перевернуть вопрос и спросить, как ограничить объем памяти, который ОС позволит вашему процессу использовать.
Попробуйте заглянуть в http: // ss64. com / bash / ulimit.html
Попробуйте сказать: ulimit -v
Вот еще одна ссылка, которая немного устарела, но дает немного больше информации: http://www.network-theory.co.uk/docs/gccintro/gccintro_77.html
Один из способов - написать оболочку для malloc ().
static unsigned int requested =0;
void* my_malloc(size_tamount){
if (requested + amount < LIMIT){
requested+=amount;
return malloc(amount);
}
return NULL
}
Вы можете использовать #define для перегрузки malloc.
Как заявляет GMan, вы можете перегрузить операторы new / delete также (для случая C ++).
Не уверен, что это лучший способ или то, что вы ищете
Какая ОС? Для Unix см. Ulimit -d / limit datasize в зависимости от вашей оболочки (sh / csh).
Вы можете написать оболочку для malloc, которая возвращает ошибку в нужной вам ситуации. В зависимости от вашей ОС вы можете заменить ее на версию реализации.
Переопределить новые и новые [].
void* operator new(size_t s)
{
}
void* operator new[](size_t s)
{
}
Поместите свой собственный код в фигурные скобки, чтобы выборочно умереть после X вызовов нового. Обычно вы вызываете malloc, чтобы выделить память и вернуть ее.
Это зависит от вашей платформы. Например, это может быть достигнуто программно на Unix-подобных платформах с помощью setrlimit (RLIMIT_DATA, ...) .
EDIT :
В этом случае также может быть полезен ресурс RLIMIT_AS а также.
Если вы хотите потратить деньги, есть инструмент под названием Holodeck от SecurityInnovations, который позволяет вам вносить ошибки в вашу программу (включая нехватку памяти). Приятно то, что вы можете включать и выключать что угодно по своему желанию. Я на самом деле не использовал его, поэтому я не знаю, можно ли с помощью инструмента запрограммировать ошибки в определенных точках. Я также не знаю, какие платформы поддерживаются ...
Однажды я учился в CS 1 (в C, да, да, не моя вина) попробуй это, и у него закончилась память:
int array[42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42]..... (42 dimensions);
, а затем он захотел узнать, почему это дает ошибки ...
Другой способ сделать это - использовать failmalloc , которая является разделяемой библиотекой, которая переопределяет malloc и т. Д., А затем терпит неудачу :-). Это дает вам контроль над тем, когда терпеть неудачу, и может быть заставлено отказывать случайным образом, каждый энный раз и т. Д.
Я сам не использовал его, но слышал хорошие вещи.
Насколько мне известно, в Linux malloc никогда не вернет нулевой указатель. Вместо этого будет вызван OOM Killer . Это, конечно, если вы не отключили OOM Killer. Некоторый поиск в Google должен дать результат.
Я знаю, что это не ваш настоящий вопрос, но он имеет отношение к тому, откуда вы пришли.