4

私は C/C++ のバックグラウンドを持っており、現在は多くの C# の作業を行っています。

最近、Android SDK をいじって以来、Java でいくつかのプロジェクトを行うことに興味を持つようになりました。

システムへのアクセスを制限できるサンドボックスで Java アプリが実行されることは知っています。

デスクトップ/サーバー アプリケーション環境では、どのような制限がありますか?

4

4 に答える 4

9

.NET アプリケーションがサンドボックスにあるように、Java アプリケーションはほとんどサンドボックスにあります。どちらもそれぞれの仮想マシンで実行され、できることにはいくつかの制限がありますが、ほとんどの場合、特定の呼び出しによるネイティブ コードへのアクセスを含め、システムへのかなりのアクセス権があります。

Java アプレットはブラウザ内で実行され、通常はローカル ファイルなどのシステム リソースへのアクセスを防止するセキュリティ サンドボックスに配置されます。(この制限は、システムへのアクセスを特定のアプレットに明確に許可することで回避できます。)

これは、 Java チュートリアルのアプレットのセキュリティ制限に関するセクションで、アプレットに適用される制限のリストが含まれています。

于 2009-06-10T16:27:06.567 に答える
4

通常、デスクトップおよびサーバー アプリケーションは、セキュリティを無効にして実行されます。ただし、Java と JVM には依然として堅牢な型システムがあるため、たとえば、オブジェクトが作成されていない型にキャストしたり、解放されたメモリにアクセスしたり、バッファの末尾から実行したりすることはできません。

于 2009-06-10T16:26:11.343 に答える
2

通常のデスクトップおよびサーバー アプリの場合、制限はサンドボックスの概念には関係なく (ユーザーが送信したコードなどに非常に細かい制限を適用するために使用できますが)、プラットフォームに依存しない Java の性質に関係しています。基本的に、OS 固有のものとハードウェア アクセスは通常、API ライブラリで特に対処しない限り、純粋な Java では実行できません。

例は次のとおりです。

  • Windows レジストリ
  • Windows システム トレイ
  • ブルートゥース
  • WLAN 構成
于 2009-06-10T16:36:46.160 に答える
0

ご覧になる主な制限は、必要に応じてネイティブ システム API を簡単に使用できることだと思います。たとえば、Java から user32 または kernel32 API を使用する必要がある場合などです。可能だと思いますが、簡単な作業ではありません。ただし、C# ではかなり簡単に実行できます。

また、いくつかのレガシー C/C++ dll がある場合でも、C# アプリケーションでそれらを使用できますが、ネイティブ コード API がポインターを使用しなければならない最悪のケースでは特に、Java でそれを行うのはまだ難しいですが、アンセーフ モードを使用できます。ポインターを渡し、スタックに固定メモリを割り当てる C# アプリケーションなど。

ただし、前述のように、Java と C# には、特にプラットフォームに依存しないことを目標としている場合、一般に同じ制限があります。

于 2009-06-10T16:35:26.130 に答える