Help us understand the problem. What is going on with this article?

【Java】気付きにくいけど恐ろしく遅くなるコード

目的

レビューをしていてIntegerだったりintだったりが混ざったコードに出会いました。
オートボクシングで変換掛かるから問題ないかなと一瞬思ったけど、性能面はどうなんだろうと気になってしまったので検証してみたいと思います。

検証環境

  • Eclipse Oxygen.3a Release (4.7.3a)
  • Java8

検証用ソースコード

1.参照型とプリミティブ型が混ざったパターン

qiita.java
long begin = 0L;
long end = 0L;

begin = System.currentTimeMillis();

Integer sum = 0;

for(int i = 0; i < 1000000; i++) {
    sum += i;
}

end = System.currentTimeMillis();

System.out.println(end - begin + "ミリ秒");

2.プリミティブ型のみのパターン

qiita.java
long begin = 0L;
long end = 0L;

begin = System.currentTimeMillis();

int sum = 0;

for(int i = 0; i < 1000000; i++) {
    sum += i;
}

end = System.currentTimeMillis();

System.out.println(end - begin + "ミリ秒");

実施手順

  • 検証用ソースコードを使用して1,000,000回加算処理を行う。それぞれ3回計測することで平均時間を算出する。小数第3位を四捨五入する。

実施結果

1.参照型とプリミティブ型が混ざったパターン

  • 1回目:15ミリ秒
  • 2回目:16ミリ秒
  • 3回目:15ミリ秒
  • 平均:15.33ミリ秒

2.プリミティブ型のみのパターン

  • 1回目:5ミリ秒
  • 2回目:4ミリ秒
  • 3回目:4ミリ秒
  • 平均:4.33ミリ秒

考察

参照型とプリミティブ型が混ざったパターンは平均15.33ミリ秒に対して、プリミティブ型のみのパターンでは平均4.33ミリ秒でした。参照型とプリミティブ型が混ざっていてオートボクシングが働いていると約4倍の時間が掛かっていることが分かる。塵も積もれば山となる、データ件数にもよりますが、無意味にオートボクシングしないようにすべきということが分かった。

ではまた(^_^)ノシ

etoumasaaki
客先常駐を中心にソフトウェアエンジニアやってます(._.) システム開発歴:9年(Java:7年、VB:2年) システム運用歴:3年(RHEL、AIX、Solaris) 家事育児と仕事の両立に頭を悩ましているワーパパですᕦ(ò_óˇ)ᕤ 【note】 https://note.com/masaaki1207
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした