質問: Androidアプリ開発におけるメモリを節約する方法として正しいものを教えて下さい。 1)インスタンスはあまり作らずできるだけstaticメソッドで対応する。 2)getter、setterはあまり使わず直接フィールドを扱う。 3)GCをできるだけ発生させないように工夫する。 4)定数はfinalで宣言する。 他にも節約方法はありますが上記が正しいかどうかを教えて下さい。 環境 Android Studio 2.2.3 os:mac
回答: その1 インスタンスをあまり作らない 普通にコードを書いていれば、「インスタンスメソッド」を使うべき場面と「`static`メソッドを使うべき場面」はおのずと分かれてきます。`static`メソッドを使うべき場面で無理やりインスタンスを作らせるのはもちろん無意味ですが、逆にインスタンスメソッドのほうが素直に書ける場面を強引に`static`で書いても、あまり意味はありません。 その2 直接フィールドを扱う これは、省けるメモリの量に対して**副作用が強すぎます**。そもそも、POJO(単にデータを入れるだけのオブジェクト)のようなごくシンプルなクラスでない限り、特にシンプルなsetterを作るべき場面すら限られますので、ましてやフィールドの直接アクセスをやりだすと、コードが混沌とするだけです。 その3 GCを発生させない これはそのとおりですが、Javaの世界では、一度使って放棄したメモリは、GCに回収させるほかなくなってしまいます。ということで、一定の大きさの領域を何度も使う場合、あえてプロパティとして再利用することでGCに頼らず再利用する、なんていう技もあります。 その4 定数はfinal インスタンスごとに定数を定義してもふつう無意味なので、`static final`としましょう。特に、`public static final`とすると、コンパイル時に定数展開されるようになります。