2011-07-28 13 views
2

誰かが次のような状況でのファイルを持つオブジェクトの最小メモリフットプリントのための最善の解決策を説明することができれば、私は数百のFooクラスに1があるかもしれませんファイルを持つオブジェクトのメモリ管理。

  1. ...と思いまして。
  2. スレッドの安全性は、重要な道のりです。
  3. 毎回Fooクラスのファイルにアクセスするわけではありません。
  4. 各ファイルは一意です。
  5. Fooクラスのファイルに複数回アクセスすることができます。

私は、以下のソリューションのプロファイルを立てて、メモリの使用量を最小限に抑えることを計画していました。私は一番うまくいくと思いますが、いくつかのフィードバックに興味がありました。解決策1は最良のアプローチのようですが、メモリリークが発生しやすくなると、何かがゲッターにアクセスするようになります。思考?

解決策1:

public class Foo{ 
     private final String pathToFile; 

     public class Foo(String pathToFile){ 
      this.pathToFile = pathToFile; 
     } 

     public File getFile(){ 
      return new File(pathToFile); 
     } 
} 

解決策2:

public class Foo{ 
     private final File file; 

     public class Foo(String pathToFile){ 
      this.file = new File(pathToFile); 
     } 

     public File getFile(){ 
      return file; 
     } 
    } 

解決策3:これは、すべてはO depens

public class Foo{ 
     private final String pathToFile; 
     private File file = null; 

     public class Foo(String pathToFile){ 
      this.pathToFile = pathToFile; 
     } 

     public File getFile(){ 
      if (file == null){ 
       file = new File(pathToFile); 
      } 

      return file; 
     } 
} 
+0

あなたの答えがあなたに最も助けになったものを受け入れるなら、他の人も同様にそれから学ぶことができます – RMT

答えて

1

あなたがプログラムで何をしたいか、他の場所にパスが必要な場合は、それを参照する必要があります。ファイルが必要な場合は、再度参照が必要です。そうしないのであれば、全体の最初のソリューション(あなたには、いくつかの時点でパスが必要な場合)、 または溶液2のいずれかfile.getPath();

:あなたができるもう一つの解決策は、パスを返すするメソッドを持っている第二の溶液です。

0

本当に大きな違いはありません。最初のオプションは呼び出されるたびに新しいファイル参照を作成します。したがって、これを100,000回呼び出してファイルへの参照を保持すると、影響が出る可能性があります。それ以外の場合は、Fooオブジェクトファイルへの参照を持つことが理にかなっているか、Fooがオブジェクトよりもサービスのほうが多く、ファイルへの合理的な参照を返すことだけが目的です。