2009-06-10 7 views

答えて

9

パフォーマンスペナルティはありますが、それは比較的低く、無視できるとみなすことができます。ここでの重要な問題は、ORMを使用して得られる利益(反射あり)が、あなたが支払う非常に小さなパフォーマンス上のペナルティをはるかに上回ることです。

パフォーマンスを見ているときは、問題が発生したときにシステムを適切に設計し、パフォーマンスを心配する必要があります。

10

Hibernate Q&A section in FAQをチェックし、それがインスタンス化については、ほぼすべてで Hibernateは、「反射」の非常に最新のバージョンでは

を発行CGLIBランタイムバイトコード 生成ライブラリを経由して を最適化されています。これは、 プロパティが「反映されました」プロパティ取得/設定呼び出しであることを意味します。 は、 JavaリフレクションAPIのオーバーヘッドを保持しなくなりました。実際には通常のメソッド呼び出しである です。この結果、 は(非常に)小さなパフォーマンス向上につながります。

+3

このFAQは最新版です。 CGLIBはHibernateのデフォルトリフレクションプロバイダではなくなりました.Hibernate 3.3では、CGLIBはJavassistのデフォルトプロバイダとして置き換えられました。 – Cowan

+0

本当ですか?知っておいてください:) –

+0

最新バージョン:[Hibernate FAQ - パフォーマンスQ&A](https://developer.jboss.org/wiki/HibernateFAQ-PerformanceQA#jive_content_id_But_Hibernate_uses_so_mun_runtime_reflection) – yukihane

15

はい、おそらくそうです。 Hibernateはさまざまな方法でかなり最適化されていますが、キャッシュがあなたを助けないと仮定すれば、適切な準備文を使って低レベルのデータアクセスよりも遅くなります。

しかし、とにかく尋ねる必要はありません。

パフォーマンスに影響するかどうかを質問する必要があります。かなり - 回答が「いいえ」であると思われます。 Hibernateの観点からは、データベースアクセスはlotで、Hibernateによるオーバーヘッドよりも遅い可能性があります。春の場合、Beanの作成は、プログラムの最初の段階でのみ行われることがよくあります。

いつものように、懸念がある場合は、ベンチマークとプロファイルが現実的なシナリオです。

2

リフレクションのオーバーヘッドが重要である可能性は、合理的なアプリケーションでは遠隔です。 (常に不合理なアプリケーションがあります:)

比較のため、プロファイルを使用してアプリケーションを実行し、JDBCドライバが消費するメモリ/ CPUの量を確認してください。

休止状態と春について重要なことは、のパフォーマンスを最適化し、より生産性とコードの信頼性を高めるように設計されていることです。

UPDATE: 私は自分自身と氏スキートが作るしようとしている点が、これらのフレームワークでリフレクションを使用してのパフォーマンスヒットが軽微であることだと思います。これは、反映がこれらのフレームワークの実装の不可欠な部分であるという事実と相まって、選択肢がほとんどないことを意味します。

+0

私は春と冬眠は開発者をより生産的にするために開発されたというあなたのコメントに全く同意します。しかし、両方のフレームワークの場合のパフォーマンスヒットの観点から、反射部分を知りたいだけです。 –

1

特定のワークロードを測定しているかどうかだけを知ることができます。

100個のエンティティを検索+ハイドレーションする場合、Spring + Hibernateは3ミリ秒のオーバーヘッドを追加すると仮定します。

作業単位に通常120ミリ秒かかる場合は、オーバーヘッドが非常に小さくなります。 5ミリ秒かかる場合、それは深刻です。

関連する問題