`
vickcy
  • 浏览: 31425 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java パフォーマンス チューニング

阅读更多

ループ処理の最適化

非効率的なループ

int a = 1;
int b = 2;
int[] c = {0, 0, 0};
String[] array = new String[10000] ;
for (int i = 0 ; i < array.length ; i++) {
    c[0] += a + b;
    array[i] = (new Integer(c[0])).toString();
}
無駄な処理を外出しにする
繰り返し内でaとbは不変なので、計算するコストを省けます。
配列を外出しにする
配列の要素への参照は、配列境界のチェックのためのオーバーヘッドが発生します。c[0]のような、固定された要素への参照が繰り返し現れる場合は、外出しにすることで、このオーバーヘッドを省けます
メンバー呼び出しをなくす
繰り返し終了条件で、オブジェクトのメソッドやフィールドを使うと、毎回ヒープ領域への参照が発生します。int型のローカル変数にコピーすることで、オブジェクトの参照と、そのメンバーの呼び出しのコストを省けます。
オブジェクト生成をなくす
繰り返しごとにオブジェクトを生成する負荷は馬鹿になりません。可能であれば、外出しにすべきです。

 

修正したループ

int a = 1;
int b = 2;
int[] c = {0, 0, 0};
String[] array = new String[10000] ;
int s = 3;
int c0 = c[0];
int len = array.length ;
for (int i = 0 ; i < len ; i++) {
	c0 = c0 + s;
	array[i] = Integer.toString(c0);
}
c[0] = c0;

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics