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


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をしてしまうと、速度遅延の原因にもなります!

「動くからいいや!」

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


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


最後まで読んでいただきありがとうございます。もしこの記事を気に入って頂けたようであればシェアをお願い致します。非常に励みになります。


コメントを残す