Как решить “java.io. IOException: error=12, не Может выделить память”, называющую Runtime#exec ()?

LINQ к SQL только поддерживает от 1 до 1 отображения таблиц базы данных, представлений, sprocs и функций, доступных в Microsoft SQL Server. Это - большой API для использования для быстрой конструкции доступа к данным для относительно хорошо разработанных баз данных SQL Server. LINQ2SQL был сначала выпущен с C# 3.0 и.Net Платформой 3.5.

LINQ к Объектам (Платформа Объекта ADO.NET) является ORM (Объектный Реляционный Картопостроитель) API, который допускает широкое определение объектных моделей предметной области и их отношений ко многим различным поставщикам данных ADO.NET. По сути, Вы можете смешивание и подгонка много различных поставщиков базы данных, серверов приложений или протоколов для разработки агрегированного мэшапа объектов, которые создаются из множества таблиц, источников, сервисов, и т.д. Платформа ADO.NET была выпущена с.Net Платформой 3,5 SP1.

Это - хорошая вводная статья о MSDN: Представление LINQ к Реляционным Данным

66
задан Andrew Thompson 4 July 2012 в 04:37
поделиться

5 ответов

What's the memory profile of your machine ? e.g. if you run top, how much free memory do you have ?

I suspect UnixProcess performs a fork() and it's simply not getting enough memory from the OS (if memory serves, it'll fork() to duplicate the process and then exec() to run the ls in the new memory process, and it's not getting as far as that)

EDIT: Re. your overcommit solution, it permits overcommitting of system memory, possibly allowing processes to allocate (but not use) more memory than is actually available. So I guess that the fork() duplicates the Java process memory as discussed in the comments below. Of course you don't use the memory since the 'ls' replaces the duplicate Java process.

18
ответ дан 24 November 2019 в 15:03
поделиться

Я наткнулся на эти ссылки:

http://mail.openjdk.java.net/pipermail/core-libs-dev/2009-May/001689.html

http : //www.nabble.com/Review-request-for-5049299-td23667680.html

Похоже, это ошибка. Рекомендуется использовать уловку spawn () вместо простой fork () / exec ().

8
ответ дан 24 November 2019 в 15:03
поделиться

Runtime.getRuntime().exec выделяет процессу тот же объем памяти, что и основному. Если у вас куча установлена на 1 ГБ и вы пытаетесь выполнить exec, то для этого процесса будет выделено еще 1 ГБ.

9
ответ дан 24 November 2019 в 15:03
поделиться

Это решение, но вы должны установить:

echo 1 > /proc/sys/vm/overcommit_memory
36
ответ дан 24 November 2019 в 15:03
поделиться

Если вы посмотрите в исходный код java.lang.Runtime, вы увидите, что exec, наконец, вызывает защищенный метод: execVM, что означает, что он использует виртуальную память. Итак, для Unix-подобной системы виртуальная машина зависит от объема пространства подкачки + некоторого соотношения физической памяти.

Ответ Майкла действительно решил вашу проблему, но он может (или, можно сказать, в конечном итоге) вызвать O.S. тупик в проблеме выделения памяти, так как я сказал О.С. менее осторожен с распределением памяти & 0 - это просто предположение, и очевидно, что вам повезло, что О.С. думаю, у тебя может быть память на этот раз. В следующий раз? Хм ...

Лучше всего поэкспериментировать со своим случаем, дать хорошее пространство для подкачки, дать лучшее соотношение используемой физической памяти и установить значение 2, а не 1 или 0.

5
ответ дан 24 November 2019 в 15:03
поделиться
Другие вопросы по тегам:

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