2016-05-27 7 views
2

これはちょっと疑問に思うかもしれませんが、私はこれについて多くのことを見つけることができませんでした(この記事以外:https://plumbr.eu/blog/memory-leaks/reducing-memory-consumption-by-20x)。空のカラムを含む結果セットのJava Beanはメモリ/サイズに大きな影響を及ぼしますか?

質問は次のとおりです.20列のOracleデータベーステーブルをクエリします。私たちは20のすべての列にマップするJava Beanを作成しました。 Spring JDBCを使用して、3つの列(20個中)を選択するクエリを実行し、Bean内の3個のプロパティ(合計プロパティ= 20)のみを設定します。つまり、残りの17個のプロパティはnullになります。今度は、結果セット(3つのフィールドが設定されていますが、17はヌルとして処理されます)を使用してレイヤー間を渡します。

これはJavaプログラムによって使用される総メモリに、何百ものDBレコードを取得するか、Javaは何とかそれを内部的に最適化するでしょうか?それだけで唯一の3つのフィールドがある豆を作成する方が良いでしょう(私たちはクエリの一部として必要?)

私たちは、JDK 1.8、春4を使用している、Oracleの11

答えて

2

はこれですはい、それは意志 -

短い答えは、Javaプログラムによって使用されるメモリの合計に影響を与えることだろう。

重要ですか?

「かなり」とはどういう意味ですか?

クラスのインスタンスが作成されるとき、それは特定のスペースを占有します。

に使用されるメモリの実際のサイズ(オブジェクトフットプリント)は、特に、多くのものに依存

  • ビーン
    • のフィールドのタイプはプリミティブである場合 - 各フィールドバイトの特定数が基準タイプにsee spec
    • を予約している(オブジェクトおよびそれが子孫'S) - 参考文献はまた4または8バイトを占有
  • メモリアライメント
  • JVM実装
  • JVMパラメータ
  • ...

あなたは17のプロパティは、我々はあなたが非プリミティブなものとして宣言されたフィールドを持っていると仮定可能性がnullに設定されている場合。したがって、これらのフィールドを使用しない場合、68または136バイトが「無駄になる」と予想されることがあります。またはさらに。問題は、それはあまりにもあなたのためですか?あなたが楽器でし

実際のオブジェクト、あなたが持っていると

をメモリフットプリントを比較すると、それはあなたのためにOKかどうかを判断かどうか、Javaが何らかの形で内部

私はないんだけど、それを最適化しますそれを認識している。しかし、誰かがそれについていくつかの光を当てることができればいいだろう。

+1

答えてくれてありがとうございます.Micklesh、それは私にとって意味があります。私は答えを受け入れる前に、より多くの入力を待つでしょう。 – JavaTec

関連する問題