VoQn 2014-01-14 18:30:19

[Java] 曰く、「getterアクセサを呼ぶ時にnullの時コンストラクタ呼ぶようにすれば余計なメモリを節約できる」

投稿者からのアピールポイント

これは或るメンバに対するGetterとSetterの実装コードです

書いた人曰く、「一年間かけてリファクタリングしていたが、冗長性を上げたが故にメモリが足りなくなってきており、これからはパフォーマンス・チューニングをかける必要がある」と主張しておられました.

  1. // なんか20000行くらいあるクラス

  2.  

  3. // ...

  4.  

  5. // 6000行目あたりに宣言されてたGetter

  6.  

  7. public FooBarDrawerBazOption getFooBarDrawerBazOption() {

  8. if (this.fooBarDrawerBazOption != null) {

  9. this.fooBarDrawerBazOption

  10. = new FooBarDrawer(

  11. this.hogehugaOptionHColor, // String

  12. this.hogehugaOptionVColor, // String

  13. this.hogehugaOptionHLength, // float

  14. this.hogehugaOptionVLength, // float

  15. this.hogehugaOptionHOffset, // float

  16. this.hogehugaOptionVOffset, // float

  17. new FooBarLineType[]

  18. {

  19. FooBarLineType.PLAIN, // 悪名高い "interface 定数" っていうヤツ

  20. FooBarLineType.PLAIN

  21. },

  22. new FooBarLineWidth[]

  23. {

  24. FooBarLineWidth.NORMAL, // 悪名高い "interface 定数" っていうヤツ

  25. FooBarLineWidth.NORMAL

  26. },

  27. this.isFooBarHDraw,

  28. this.isFooBarVDraw);

  29. }

  30. return this.fooBarDrawerBazOption;

  31. }

  32.  

  33. // ...

  34.  

  35. // 17000行目あたりに宣言されてたSetter

  36.  

  37. public void setFooBarOptionHOffset(float newHogehugaOptionHOffset) {

  38. this.hogehugaOptionHOffset = newHogehugaOptionHOffset;

  39. this.hogehugaBazOptionHOffset = newHogehugaOptionHOffset;

  40. this.fooBarDrawerBazOption = null; // Drawerの内部メンバが変更されたので初期化

  41. }

使い方ヒント: 「これは臭う」という行を見付けたら、各行のsmellをクリックしてマーキングしておきましょう(要Twitter OAuth認証)

コメント(5)

#1 c_9_l 2014-02-11 01:18:48  

パフォーマンス以前に動くんかこれ。。。
出来立てインスタンスor null しか返ってこない気が。。。

#2 kogaken1 2014-02-11 07:36:35  

FooBarDrawerをどうしてもimmutableにしたいのかなぁ…そもそもfooBarDrawerBazOptionとhogehugaOptionHColorなどの個別メンバとで2重管理するのも意味不明だ。

#3 guicho271828 2014-02-16 01:16:49  

あーあ、javaなんか使ってるから。Common Lisp, javaが必要ならclojureでマクロ書けばいいのに。 こういうテクをマクロに落とし込めば、そしたらあとは全アクセサを自動生成すればいいだけ。 抽象度の低い言語のつまらない仕様にがんじがらめにされるのはいやだね。

#4 tkcomcom1is 2014-02-23 13:17:23  

百歩譲ってメモリ不足解消は理解するとしても、コード量から察するに処理速度は物凄く低下しそうな気が……。

#5 tethon 2014-06-07 15:25:13  

If文の条件があれなので、いつもnullだけしか返らなそう…。

コメント投稿には、twitter認証が必要です。

Twitter認証

このウンコードに臭った人は、こちらのウンコードにも臭ってます

* [Java] is禁止令

ウンコードの趣旨とは違い、レビューで指摘...

// Mod yamada Start

// 一般的に考えて真偽値を返すメ...

鑑賞する »

* [Java] もうコメント書くなお前

改修案件でぶち当たったソース マジでこ...

/**
  *
  *   〇〇の値を取得する
  *
  */
pu...

鑑賞する »

* [Java] 専用機

山田さん(仮名)専用機らしいことがクラス...

/**
 * My Army Knife
 * 20XX/XX/XX
 *...

鑑賞する »