0

OSGI は今日のバズワードです。疎結合、再利用性など、多くの利点があります。しかし、プロジェクトで使用する必要がある OSGI に関連するオーバーヘッドがあるかどうかを知りたいです。速度やその他の種類のオーバーヘッドに影響しますか。助けてください

ありがとう

4

3 に答える 3

4

実際のオーバーヘッドはありません。OSGi は、メモリに非常に制約のある環境で動作するように設計されており、各ロード リクエストを検索するためのクラス スペースが小さいため、実際には実行速度が向上します。

素朴な開発者がばかげたことをしてパフォーマンスを台無しにすることは常に可能ですが、それはどの環境にも当てはまります。

于 2012-06-27T11:59:13.017 に答える
2

典型的な OSGi 環境では、バンドル クラスローダーと OSGi サービスがパフォーマンスに影響を与える可能性があります。バンドル クラスローダは、クラスのスペースが小さいだけなので、通常のクラスローダより遅くなることはありません。場合によっては、ニールが書いたようにさらに高速になる可能性があります。OSGi サービスもパフォーマンスに影響を与えるべきではありません。基本的に、それらはインターフェイスの Impl クラスを検索する方法にすぎません。したがって、Impl が解決されると、オーバーヘッドのない単なるメソッド呼び出しになります。シリアライゼーションはなく、プロキシも関係ありません。

于 2012-06-27T15:38:54.330 に答える
2

OSGi を使用することによる本番環境への最大の悪影響は、異なるクラスローダーで複数のバージョンのクラスがロードされるために必要な PermGen スペースが増加することです。JRockit (必要に応じて OS から割り当てられる場所) を使用しない限り、PermGen の最大サイズは JVM の起動時に固定され、クラスローダーのリーク (収集が容易) があるとクリアするのが難しくなり、リソースが多少制限される可能性があります。

実質的なパフォーマンスへの影響はありません。コーナーケースで何を期待するかを知るには、ある程度の認知的負荷がかかる場合があります-たとえば、異なるクラスローダーを介してロードされた「同じクラス」のインスタンスは、異なるタイプを持つことになります(instanceof比較するとtrueが返される場合にfalseをobj.getClass().getName()返します)-しかしパフォーマンスは影響を受けません。

于 2012-06-27T15:41:14.397 に答える