Rain技術情報などを不定期で投稿していきます。programArrayListは、通常固定されている配列のサイズを拡張しながら利用できる、非常に便利なクラスです。このクラスによって、我々は配列のサイズとメモリを管理するという煩雑な仕事から解放されました。size)のパフォーマンスを検証してみます。まとめArrayListの動きArrayListは、指定がなければ初期値10で初期化され、addメソッドが呼ばれる度に内部の配列が拡張されます。普段は意識する必要がないのですが、パフォーマンスが少しでも欲しい場合、ここを適切に設定することで改善する可能性があります。addメソッドの中身ここで、理解を深めるためにaddメソッドの中身を見てみましょう。パフォーマンスチューニングは、メソッドの内部処理を把握することから始まります。grepcodeという便利なサイトがあります。このサイトのArrayList.addを抜粋します。true;}ensureCapacityInternalというメソッドが呼ばれています。ここで内部に持っている配列の領域を確保しているわけです。このメソッドの中身も見てみます。grow(minCapacity);}更にgrowメソッドが呼ばれていますね。newCapacity);の部分で新しい配列が作られています。Arrays.copyOfの内容は割愛しますが、このように、サイズを拡張するためには様々な処理が呼ばれていることがわかります。minCapacity)の内部処理でif文が書かれています。これは現在のサイズをminCapacityが超えていればgrowメソッドを実行するという意味の処理です。現在のサイズがminCapacity以上であれば、その処理はスキップされるのです。この処理自体はそこまでの負荷ではありませんが、100万件を超えるadd呼び出しが繰り返されている場合は、適切な初期値を設定することにより大幅な性能アップが期待できます。検証するそれでは、この仮説を検証してみましょう。119約20%の性能向上が見られます。List::addを頻繁に利用するシステムでないと効果は薄いですが、パフォーマンスチューニングとしては有意な結果を得られるようです。最適な値を探るここまでで、ArrayListに初期値を与えればパフォーマンスによい影響を及ぼすことがわかりました。闇雲にメモリ領域を確保するのはあまりよくない作りです。Collection)や、潤沢なリソースのおかげで、メモリを昔ほど意識しなくても、高い品質のプログラミングを行えるようになりました。メモリの使用効率を意識してプログラミングを行うことは、いわばプログラマにとっての礼節であると言えます。いえ、パフォーマンスを重視するのであれば、想定数より少し余裕を持った領域を確保していても文句は言われないでしょう。想定値を検証せず、無為に大きい値を確保することは避けるべきです。先ほどの検証コードでは、その後のコードで100万件のデータをaddすることが事前にわかっているわけですから、サイズは100万が最適です。ない場合は、少しの計算が必要です。まとめ今回は、パフォーマンスチューニングに有用なArrayListの初期値に関する話題でした。addを繰り返すような状況でない限りはあまり役に立たないかもしれませんが、処理が遅いときは見直してみるのも良いかもしれません。tam-tam関連記事プログラミングにおけるコメントの必要性プログラミングのお作法とも呼べる、コメントの必要性と考え方について解説しました。記事を読むオブジェクト指向でエンタープライズ視聴覚室を作るオブジェクト指向の説明にアニマルクラスやら自動車クラスは飽きたのでエンタープライズ視聴覚室を作る。部...記事を読む最初に学ぶプログラミング言語の選択これからプログラミングを学ぼうとする人にとって、プログラミング言語の選択は重要なものです。現在はJavaが主流ですが、一昔前はプログラミン...記事を読む安易にフラグ変数を利用すべきでない3つの理由プログラムが動作する上で必須に近い、「boolean」変数。安易に使いすぎると可読性の低下などにより、不利益を被ってしまうことがあります。...記事を読む【パフォーマンスチューニング】配列の検索パフォーマンスチューニングについて、今回は特に配列の操作に特化して考えてみました。記事を読むgetter/setterの必要性Javaでしばしば議論となる、getter/setterの必要性について考えてみました。いわゆる...記事を読むエンジニアが情報収集する上で大切な3つのこと普段、意識して取り組んでいることを3つ抜粋しました。ネット上で技術文書を読みあさると、時にとんでもない...記事を読むリファクタリング入門リファクタリングという、悪魔の壺に手を突っ込む行為は、時に耐え難い痛みを伴うことかもしれません。リファクタリ...記事を読む【2018】今学ぶべきプログラミング言語を考えるプログラミング言語は、ただそのひとつを学習すれば良いというわけではなく、作ろうとするプロダクトによって向き、不向きが変わります。...記事を読む【単体テスト設計】どのようにしてテストコードを書くのか?テストコードは重要なものです。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。