java

【Java】新卒BtoBエンジニアに気をつけてほしい!無意識のうちにboxingしていない?

mokabuu
public static void hoge(String[] args) {
	Long sum = 0L;
	for(long i = 0; i <= Integer.MAX_VALUE; i++){
		sum += i;
	}
	System.out.println(sum);
}

これの何がいけないかわかりますか?

SumがLongからlongになっていますよね!
なので実行するたびに以下の処理が走るのです。

①Long sumをlongにする
②計算する
③long sumをLongに戻す

ってな感じで、ものすごい勢いでauto boxingがひたすら繰り返されるのです。

つまり、ものすごい勢いで、いらんデータを作っては消して行くことになります!

GCは不要なデータを消す時に一瞬「時を止める」ことで有名ですよね!

参考:あまりにジョジョすぎて挿絵がボツになった件 / flairDays – てさぐりの日々

なので、このように大量にいらんデータを作っては消すことで、何回も「時が止まる」っちゅーわけなのです。


ちなみに

Long sum = 0L;

これは実はとても面白いコードなのです。

0とか1とか、頻繁に使われるものは最初からstaticで持たれているんですよね!

なので、すでにstaticで持っているものを参照するだけなので、サクッと動くわけです。

最後のsysoutはtoString()ですね!


無意識のうちに大量にauto boxingをしてしまうと、速度遅延の原因にもなります!

「動くからいいや!」

ではなく、品質の高い、動きも見た目も綺麗なコードを書くように心がけましょう!


ちなみに元ネタはこちら。

[adsense]

Xからの読者コメントをお待ちしています。
ブログ更新の励みになります!
スポンサーリンク

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
mokabuu
mokabuu
ブログ管理人
2014年1月からmokabuu.comを運営しております。現在10年間で老朽化したサイトをリフォーム中です(2025/1〜)。
記事URLをコピーしました