Ограничения настольных Java-приложений? - PullRequest
4 голосов
/ 10 июня 2009

Я родом из C / C ++ и сейчас много занимаюсь C #.

В последнее время я заинтересовался выполнением некоторых проектов на Java с тех пор, как начал играть с Android SDK.

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

В среде приложений для настольных компьютеров и серверов какие вещи ограничены?

Ответы [ 4 ]

9 голосов
/ 10 июня 2009

Java-приложения находятся в «песочнице», а .NET-приложения - в «песочнице». Они оба работают на своих соответствующих виртуальных машинах и имеют некоторые ограничения в отношении того, что они могут делать, но по большей части они имеют хороший доступ к системе, включая доступ к собственному коду через определенные вызовы.

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

Вот раздел Ограничения безопасности для апплетов из Учебники Java , который включает список ограничений, наложенных на апплеты.

4 голосов
/ 10 июня 2009

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

2 голосов
/ 10 июня 2009

Для обычных настольных и серверных приложений ограничения не связаны с концепцией «песочницы» (хотя вы можете использовать ее для применения очень тонких ограничений, например, к пользовательскому коду), а зависят от платформы Java. По сути, доступ к конкретным операционным и аппаратным средствам обычно не может быть осуществлен в чистом JAVA, если это не оговорено библиотекой API.

Примеры:

  • Реестр Windows
  • Системный трей Windows
  • Bluetooth
  • Конфигурация WLAN
0 голосов
/ 10 июня 2009

Я думаю, что основным ограничением, которое вы можете увидеть, является возможность легко использовать API системной системы, если вам нужно, например, если вам нужно было использовать API user32 или kernel32 из Java, я думаю, что это возможно, однако это не простая задача, однако в C # это довольно легко сделать.

Также, если у вас есть некоторые устаревшие библиотеки C / C ++, вы все равно можете использовать их в приложении C #, хотя в Java все еще сложно это сделать, особенно в худшем случае, когда ваш нативный код api должен использовать указатели, вы можете использовать небезопасный режим в приложении C # для передачи указателей и выделения фиксированной памяти в стеке ... и т. д.

но, как уже упоминалось выше, Java & C # в целом имеют те же ограничения, особенно если вы хотите быть независимыми от платформы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...