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 к Реляционным Данным
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.
Я наткнулся на эти ссылки:
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 ().
Runtime.getRuntime().exec
выделяет процессу тот же объем памяти, что и основному. Если у вас куча установлена на 1 ГБ и вы пытаетесь выполнить exec, то для этого процесса будет выделено еще 1 ГБ.
Это решение, но вы должны установить:
echo 1 > /proc/sys/vm/overcommit_memory
Если вы посмотрите в исходный код java.lang.Runtime, вы увидите, что exec, наконец, вызывает защищенный метод: execVM, что означает, что он использует виртуальную память. Итак, для Unix-подобной системы виртуальная машина зависит от объема пространства подкачки + некоторого соотношения физической памяти.
Ответ Майкла действительно решил вашу проблему, но он может (или, можно сказать, в конечном итоге) вызвать O.S. тупик в проблеме выделения памяти, так как я сказал О.С. менее осторожен с распределением памяти & 0 - это просто предположение, и очевидно, что вам повезло, что О.С. думаю, у тебя может быть память на этот раз. В следующий раз? Хм ...
Лучше всего поэкспериментировать со своим случаем, дать хорошее пространство для подкачки, дать лучшее соотношение используемой физической памяти и установить значение 2, а не 1 или 0.