ここから本文です

Javaの実行速度の変化の要因について こんにちは、お世話になります、 今回...

tor********さん

2018/12/3011:09:03

Javaの実行速度の変化の要因について


こんにちは、お世話になります、
今回はJava(というよりプログラミング言語全体)でのいわゆる「速さ」の要因について教えてください。

下に並べた要因っぽいものの中で、どれが実際に実行速度へ影響を与えるか教えてください
(書き方 題:詳細)

・変数の宣言(と初期化):int a = 10と変数を宣言するのとa =10と既に宣言されている変数の値を設定する時の変化の速さの違いがあるのか

・関数化:大きなメソッドの塊(例:JFrameを宣言してから表示までの詳細な設定)を一つの関数としてまとめて、mainメソッドでその変数を実行すると、関数の中のメソッドを直接mainメソッドで実行するのとは速度は変わるのか

・クラスのメソッド数:クラスをインスタンス化して宣言する際、実装されているメソッドの数が多かったり少なかったりするとインスタンス化にかかる時間は変わるのか


また、この他に速度に影響を与える要因を思いつく限りでいいので可能なら教えてください
また、質問文がわかりづらかったら分かりづらいところを教えてくだされば書き直します

閲覧数:
45
回答数:
3
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

ama********さん

2018/12/3014:37:00

>・変数の宣言(と初期化):int a = 10と変数を宣言するのとa =10と既に宣言されている変数の値を設定する時の変化の速さの違いがあるのか

現在、Javaの最適化は凄いらしいので、恐らく影響ないでしょう(クライアント用Javaとサーバー・サイドJavaの最適化は少し違いますが)。

>・関数化:大きなメソッドの塊(例:JFrameを宣言してから表示までの詳細な設定)を一つの関数としてまとめて、mainメソッドでその変数を実行すると、関数の中のメソッドを直接mainメソッドで実行するのとは速度は変わるのか

(中身のコード量は関係なく)関数を呼び出すとコストが かかります(問題になるのは何万回も呼び出すような場合なので、通常は心配する必要はありません)。

>クラスのメソッド数:クラスをインスタンス化して宣言する際、実装されているメソッドの数が多かったり少なかったりするとインスタンス化にかかる時間は変わるのか

微妙に変わるかもしれません(何万個もインスタンス化すれば顕著になるかもしれませんが、通常は心配する必要はありません)。

>この他に速度に影響を与える要因を思いつく限りでいいので可能なら教えてください

現在、Javaの最適化は凄いらしいので、通常は心配する必要はありません。
ただし、以前から指摘されていた話ですが、JavaのThreadはカスだとかクズだとかクソだとか批判されていました。

知らない間にThreadが非推奨に?(正式な非推奨では無いかもしれないが、そんなクズみたいなモノを何時までも使わないでくれよ、って話)

マルチコア時代のCPUリソースを有効活用--Java EE 7で進化した並列処理を理解する
https://builder.japan.zdnet.com/java/35032957/
https://builder.japan.zdnet.com/java/35032957/2/

  • ama********さん

    2018/12/3014:48:34

    下記の「オートボクシング、アンボクシング」も微妙にコストが かかります、何万回もループするような場合に顕著になるかもしれません。
    問題はJavaが自動的に変換してくれるので、プログラマーは「オートボクシング、アンボクシング」でコストが かかってると言うのが分かりにくい点です。
    プログラマーは何万回もループするような場合は、ループ内で「オートボクシング、アンボクシング」をしてないか良く注意する必要があります。

    プリミティブ型、オブジェクト型(参照型) オートボクシング、アンボクシング
    http://qiita.com/chihiro/items/870eca6e911fa5cd8e58

  • その他の返信(4件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/1/3 19:33:38

ベストアンサー選択遅くなり申し訳ありません。
皆さん丁寧な回答ありがとうございました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

ikt********さん

2018/12/3015:21:07

直球の丁寧なご回答は既についているので。

> この他に速度に影響を与える要因...

質問文に書かれてるのは、なんというかどれも
ミクロ というか 重箱の隅 みたいな話ばかりな気が。
# 気に障ったら、ごめんなさい。

いちばん速度に影響を与えるのは、やはり
・アルゴリズム

・データ構造
なんではないですか?

もちろん、扱うデータの量 によるし、
トレードオフ はあるけれど。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

プロフィール画像

カテゴリマスター

aki********さん

2018/12/3012:44:41

あくまで理屈の上での話ですが、

宣言と初期化に関しては、宣言だけの場合は、あくまでコンパイラの内部で変数とメモリの割り当てを決めるだけで
実行時には特になにかする訳ではないのでそれ自体には時間は掛からないはず。
ただ、C言語とかの場合はそうでも、JAVAの場合は、宣言と同時にデフォルトの初期化を行うので、メモリへの書き込みが
デフォルトの初期化、明示的な初期化の2回行われる可能性はある。その場合、時間はかかる事になる。
でも、実際には、明示的な初期化が変数が一度も使われる前に行われることが解っているのなら
初めからその値で初期化するぐらいの最適化は普通期やってると思う。
その場合は、両者に差はない(同じコードになる)はず。

関数の呼び出しにはオーバーヘッドがあるので、例えば、ループの中で関数を毎回呼ぶのと
関数の中身をループの中に直接書くのとでは、後者のほうが速い。
ただし、これもまた最近のコンパイラは、最適化で自動的に展開してくれたりもする。
そうなった場合では、両者に速度的な違いは無い(同じコードになる)はず。

クラスのメソッドは、クラスメソッドであれインスタンスメソッドであれ、クラス側で一括して持っていて
個々のインスタンスが個別に持っていたりはしない。
なので、メソッドの数の差によるインスタンス生成のコストは変わらない。

こんな感じのはず。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる