2017-01-05 5 views
2

私はJavaで料理本をプログラミングしました。そのために、料理の名前や写真などの情報が保存されるレシピオブジェクトを作成しました。プログラムにあまりにも多くを読み込んでいますか? (Java)

すべてのオブジェクトをリストに入れ、すべてのレシピでリストをシリアライズしました。料理本をもう一度開くと、これらのレシピ(各レシピには画像があります)がプログラムに再度ロードされます。

レシピが500以上ある場合は、プログラムに500以上の画像を読み込む必要があります。

私の質問:

  • は、これらの写真は私のコンピュータのRAMに保存されますか?
  • 各レシピを独自のファイルにシリアル化し、 のレシピだけをロードする方が良いでしょうか?
+0

に属する(画像など)「リソース」からレシピを分離する「使用」すること保存された場所。そして、必要なときに、保存された場所から再度読む。 – SachinSarawgi

答えて

4

は、シリアル化とは関係ありません。少なくとも概念的なレベルで。

ポイントは:あなたのカスタムオブジェクトOがXバイトのデータを消費するときです。それらのXバイトのデータは、オブジェクトOがJVM内で「生きている」限り、JVM内に割り当てられます。

つまり、画像のバイトをオブジェクトに直接入れると、これらのオブジェクトがの新しいによって作成されているか、またはいくつかのバイトストリームから読み込まれた場合、またはn異なるソースから読み取られる場合は問題ありません。

まさにその理由から、イメージバイトを直接「ビジネス」オブジェクトに「含める」ことを試みます。たとえば、イメージをファイルとしてハードドライブに保存することによって、オブジェクトにファイル名を追加するだけです。意味:実際にドライブから画像をロードする画面に「レシピ」を表示した場合のみ。それをユーザに表示する。

だからあなたの質問への答えは:あなたが一つのファイルから、またはnはファイルからシリアライズされたオブジェクトをロードする場合、プログラムのメモリ消費は気にしません。

あなたのメモリ消費量は、「レシピオブジェクト」に何らかの形で関連付けられている「リソース」をどのように処理するかによって決まります。

最後に行うことは、お客様の要件によって異なります。我々は、いくつかの "平均的なデスクトップ"マシンで想定されている小さなJavaプログラムについて話している場合、あなたのJVMに500または1000の「ライブ」オブジェクトを保持することはOKかもしれません。 1つ1つがピクチャで500KBを消費しても(しかし、ここではすでに250MBのRAM消費量に簡単に達していることに注意してください)。

しかし、携帯電話で動作しているアプリについて話している場合は、あなたは確かに 250 MBのメモリを浪費し、そこに500のオブジェクトを保持したい。

ので、ほとんどの場合には、合理的なアプローチは、より多くのようになります。

  1. 、彼らがしようとしているだけで「ロード」のレシピ
  2. メモリ内のすべての時間を知らレシピのリストを維持
  3. は、一般に、指定したフォームをシリアル化オブジェクトを変換しながら
+0

ありがとうございました!私はそれを試みるつもりです。 –

関連する問題