Среда выполнения Java и вызовы ОС - PullRequest
1 голос
/ 09 апреля 2009

Среда выполнения Java предоставляет набор стандартных системных библиотек для использования программами. Насколько эти библиотеки похожи на системные вызовы операционной системы и насколько они различны ???

Ответы [ 4 ]

4 голосов
/ 09 апреля 2009

Половина java состояла в том, чтобы сделать его независимым от платформы, поэтому он пытается предоставить API, который остается неизменным независимо от операционной системы под ним.

Если ОС недостаточно мощная, Java добавит библиотечный код, чтобы компенсировать это.

Если в ОС есть реализация, которая не отображается, Java сделает все возможное, чтобы отобразить ее.

Если новая функция становится популярной, и пользователям Java необходимо предоставить доступ к ней, можно создать новую библиотеку, с помощью которой вы сможете получить доступ к новым функциям. Если эта библиотека популярна, она будет реструктурирована и добавлена ​​в Java SDK в какой-то момент

Например, реализация некоторых библиотек параллелизма стала популярной, и вскоре за них проголосовали и добавили в стандартные библиотеки. Это происходит постоянно.

1 голос
/ 09 апреля 2009

Это, очевидно, зависит от операционной системы, на которой вы работаете, поскольку системные вызовы, как правило, различны для каждой ОС: -).

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

например. java.nio.MappedByteBuffer, вероятно, был вдохновлен вызовом Unix mmap (). Но в конечном итоге большинство концепций присутствует в большинстве операционных систем, поэтому вы не можете сказать, что именно вдохновило вас.

0 голосов
/ 10 апреля 2009

Стандартная библиотека Java часто имеет сходный набор функций по сравнению с нативной библиотекой, но есть несколько важных отличий.

  1. Java является объектно-ориентированной, нравится вам это или нет. Преимущество этого состоит в том, что определенными понятиями легче управлять. Например, большинство операций с файлами находятся непосредственно в объекте File. Сравните это с Posix, где FILE - это дескриптор, который на самом деле является просто числом; индекс в списке открытых файлов вашего процесса. Подход Posix очень близок к тому, как ОС на самом деле реализует вещи. Но в Java вы этого не видите, не знаете или не заботитесь.
  2. В некоторых случаях Java обладает определенным поведением с наименьшим общим знаменателем. Есть много API-интерфейсов AWT, которые являются такими, какими они являются, потому что AWT должен был быть идентичным на ряде отдельных платформ. Это оказалось безумием, и Sun почти отказалась от AWT, потому что поддержка платформы в равной степени означала поддержку каждой платформы. Более новая библиотека, Swing, реализует почти все в чистой Java, и, следовательно, гораздо лучше справляется с кроссплатформенными вещами и, следовательно, имеет более богатый API. И этот API сильно отличается от встроенной библиотеки окон. Кроме того, Swing не очень хорошо интегрируется, поскольку использует так мало собственной ОС.
  3. У Java есть определенные ограничения, которых нет у нативных библиотек. Например, у вас нет указателей на функции. Таким образом, у вас есть Listeners и Runnable и другие шаблоны Java для выполнения действий, которые в C ++ будут включать указатели на функции. Поэтому любой API, которому требуется одна из этих функций, будет значительно отличаться в Java от нативной ОС.

Итак, в заключение, у Java часто есть библиотеки, которые предлагают поведение, подобное нативной ОС, и иногда предлагают совершенно другое поведение, но лучше думать о Java как о отдельной платформе. Иногда вам нужна повышенная производительность, такая как OpenGL или сверхбыстрая передача данных, в этом случае вам понадобится конкретный Java API (Jogl, nio), но большую часть времени вы должны оценивать Java как отдельную вещь.

0 голосов
/ 09 апреля 2009

Некоторые из «низкоуровневых» функций Java являются «обертками» для некоторых ОС системные вызовы.

Я не вижу объективного способа (и причины) «сравнить» оба.

Если вы заинтересованы в этой теме, вы можете искать исходный код Java для ключевого слова native , которое указывает на некоторое «скрытое» (в основном зависит от ОС).

...