javaのループ回数に関連する実行時間について

このQ&Aのポイント
  • Windows7 メモリ2GB弱で、Sample61.javaのjavaファイルを400回(又は4000回)ループし、各ループの『obj.method(j);』を実行する所要実行時間を測定し、最大値、最小値を表示しています。
  • 400回ループの場合の各ループの最大実行時間は約0.34ms、4000回ループの場合の各ループの最大実行時間は約1.6msです。
  • Q1) 400回ループと4000回ループの場合において、『obj.method(j);』を実行する所要実行時間の最大値の差の原因についてコメントをください。アルゴリズムに誤りがあれば指摘してください。
回答を見る
  • ベストアンサー

javaのループ回数に関連する実行時間について

Windows7 メモリ2GB弱で、下記のSample61.javaのjavaファイルを400回(又は4000回)ループしまして 各ループの『obj.method(j);』を実行する所要実行時間を測定し、最大値、最小値を表示しています。 測定環境は下記の、『S_Sample61 //フォルダー構造』、『aaa.bat //バッチファイル』、 『Sample61.java //javaファイル』をご覧ください。 400回ループの場合の各ループの最大実行時間:約0.34ms 4000回ループの場合の各ループの最大実行時間:約1.6ms Q1)400回ループと4000回ループの場合に於いて、『obj.method(j);』を実行する所要実行時間 最大値の差の原因についてコメントください。 注)もしアルゴリズムに誤りがあれば、ご指摘ください。 S_Sample61 //フォルダー構造 ---class ---jar ---src aaa.bat //バッチファイル cls c:\pleiades44\java\8\bin\javac -encoding UTF-8 -cp ./jar/* -d ./class ./src/*.java rem c:\pleiades44\java\8\bin\java -verbose:gc -cp ./class;./jar/* Sample61 c:\pleiades44\java\8\bin\java -cp ./class;./jar/* Sample61 pause Sample61.java //javaファイル class Sample61{ public static void main(String args[]){ sub obj ; long start=0; int max=0; int min=99999; for(int j=0; j<400; j++){ obj = new sub(); //dataProcess_XXX obj_dataProcess=new dataProcess_XXX(); //obj_dataProcess.setPriority(Thread.MAX_PRIORITY); //効果なし //obj_dataProcess.start(); //obj.setPriority(Thread.MAX_PRIORITY); //obj.start(); start=System.nanoTime(); obj.method(j); long end=System.nanoTime(); long wk=end-start; if(wk<min) min=(int)wk; if(wk>max) max=(int)wk; // System.out.println("cycle_time="+wk); // obj = null; // System.gc(); // try{Thread.sleep(1);}catch(InterruptedException e){} } //for String str; str=String.format("min=%1$,d max=%2$,d max/min=%3$d",min,max,(int)(max/min)); System.out.println(str); // System.out.println("min="+min+" max="+max+" max/min="+(int)(max/min)); } //main } class sub{ void method(int k){ int a,b,c; a=100; b=200; for(int i=0; i<10000; i++){ c=(a+b+k)*i; } // System.out.println("ようこそ!javaの世界へ"); } } 以上、宜しくお願いします。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

原因はガーベッジコレクションでしょう。

bakabon_xx
質問者

補足

お世話になります。 ガーベージコレクションを表示する下記のjavaコマンドで計測しましたが、GCの発生した形跡 は無い様です。オプション-verbose:gc では表示されないのでしょうか? c:\pleiades44\java\8\bin\java -verbose:gc -cp ./class;./jar/* Sample61 以上

関連するQ&A

  • javaのプログラムについて

    java始めたばかりの者です。 class sample1 { public static void main(String[] args) { for(int i=1; i<=5; i++){ for(int j=0; j<i; j++){ System.out.println("*"); } System.out.println("\n"); } } } これを実行すると * * * * * * * * * * * * * * * こうなってしまい * ** *** **** ***** このようにするにはどうしたらいいのでしょうか??

    • ベストアンサー
    • Java
  • javaが実行されない

    雑誌を買ってjavaでプログラミングをしているのですが なぜか実行できません。 ツールはteraPadとJDKを使っています。 public class sample { public static void main(String[] args) { System.out.println("hello!"); } } コンパイルし、classファイルを実行すると Exception in thread "main" java.lang.NoClassDefFoundError: sample/class と出て実行できません。結果はhello!となるはずなのですがどなたかどこがおかしいのか教えてください。

    • ベストアンサー
    • Java
  • ループの回数の問題についてです。

    SUN教科書 javaアソシエイツP102についてです。 Helloが何回表示されるかという問題です。 i=1 j=1の時、continue文によりouterへ移動するという 所までは理解出来ます。 分からないのはその後、解説によるとiが2ということです。 そして内側のforループは0から2の間、実行されるというのです。 iが2になるなら、内ループに入った時jも 2になるのではないのでしょうか。 よろしくお願い致します。 class LoopSample{ public static void main(String[] args){ outer: for(int i=0; i<5; i++){ for(int j=0; j<3; j++){ if(i==1 && j==1){ continue outer; } System.out.println("Hello"); } if(i==1 || i==2){ break; } } } }

    • ベストアンサー
    • Java
  • javaの実行について

    java入門の入門で、javaの勉強を始めた初心者です。その中で、わからないことが出てきたので、助けてください。  public class sample { public static void main(String[] args) { System.out.println("hello!"); } } というプログラムを書いて、コンパイルし、実行したのですが、 Exception in thread "main" java.lang.NoClassDefFoundError: sample/class というメッセージが出てきて実行できませんでした。ファイル名は、正確に入力しました。ちなみに、 sourceというディレクトリを作ってその中に、プログラムとコンパイルしたファイルを入れています。 C:\Source のディレクトリ 005/08/21 01:15 <DIR> . 005/08/21 01:15 <DIR> .. 005/08/21 04:59 412 sample.class 005/08/21 01:14 108 sample.java 2 個のファイル 520 バイト 2 個のディレクトリ 78,121,422,848 バイトの空き領域  そして、環境変数pathは、  C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Common Files\Adaptec Shared\System;C:\Program Files\Common Files\Ulead Systems\MPEG;C:\ Program Files\Java\jdk1.5.0_04\bin です。長くなってしまいましたが、ここで止まってしまって先に進めません。どうかアドバイスをお願いします。

    • ベストアンサー
    • Java
  • Linuxで作成windowsで実行するjava

    タイトルどおり、Linux上で実行ファイルを作成してそれを windows上でも実行できるようなjavaの書き方を教えてください。 普段の作業はlinux上で行っていますのでここでソースを書いて、 他人に使ってもらうことを念頭にwindowsでも動くプログラムを書きたいです。 私はjavaは使ったことがなく、普段はperlをメインにたまにcを使う程度の 能力です。 linux上でHello.javaを以下のように作成し、 -------------- public class Hello{ public static void main(String[] args){ System.out.println("hello!"); } } --------------- $javac Hello.java $java Hello で実行できるところまでは行きましたが、これ以降はどうすればいいのでしょうか? 検索してみてjar圧縮が必要かと思い $jar cvf Hello.jar Hello とすると added manifest adding: Hello.class(in = 410) (out= 281)(deflated 31%) と表示され、Hello.jarファイルが生成されていますがうまく実行できません。 よくわかっていないのですがよろしくお願いします。

    • ベストアンサー
    • Java
  • javaの実行環境

    javaの勉強をしようと思い、以下のhelloworldコードを書いてみました。 public class HelloWorld { public static void main(String[] args) { System.out.print("Hello World\n"); } } それを、以下のようにlinux環境(ubuntu 10.10)でコンパイル実行しようとしたのですが、 javac HelloWorld.java java HelloWorld.class Exception in thread "main" java.lang.NoClassDefFoundError: ・・・ と怒られてしまいました。そこで色々調べて jar cvmf manifest.mf test HelloWorld.class とjarファイルを作成して実行したところ、適切に"Hello World"が表示されました。 (manifest.mfの中身は"Main-Class: HelloWorld"1行だけです。) その後、このjarファイルをwindows環境に持っていって実行したのですが、 Exception in thread "main" java.lang.NoClassDefFoundError: ・・・ と怒られてしまいました。 linux環境で、"echo $CLASSPATH"を実行しても何も表示されず、CLASSPATHはどこにも通っていないようです。 また、windows環境のDOS画面にてSETを実行し、環境変数を表示させてもCLASSPATHはありませんでした。(javaはインストール済みです。) で、質問です。 1)なぜjarにすると実行でき、classファイルのままでは実行出来なかったのでしょうか? 2)windows環境で、CLASSPATHを設定したほうが良いのでしょうか?設定する場合は、prgramfiles\java\binで良いのでしょうか? 以上、長くなり申し訳ないのですが、よろしくお願いします。

    • ベストアンサー
    • Java
  • java 実行エラーについて

    プログラムを実行すると、 Exception in thread "main"java.lang.NoClassDefFoundError:Sample と出ます。理由がわかる人はぜひ教えてください。 一応プログラムを載せておきます。 < Sample.java > public class Sample{ public static void main(String[] argc){ System.out.println("Hello World!"); } } お願いします。

    • ベストアンサー
    • Java
  • Java trimの設定について

    Java trimの設定についてお伺いいたします。 最高気温と最低気温を表示することができずに困っております。trimをどのように設定すれば良いかご教授お願いします。 以下、ソースを記載します。 import java.io.*; public class Sample { public static void main(String[] args) { try{ BufferedReader br = new BufferedReader(new FileReader("kion.txt")); System.out.println("気温データ出力"); int test[] = new int[4]; String str; for(int i=0;i<test.length;i++){ str = br.readLine(); } int max = 0; int min = 0; for(int i=0;i<test.length;i++){ if(max < test[i]) max = test[i]; if(min > test[i]) min = test[i]; System.out.println(test[i]); } System.out.println("最高気温" + max + "です。"); System.out.println("最低気温" + min + "です。"); br.close(); } catch(IOException e){ System.out.println("入出力エラーです"); } } } また「kion.txt]は 東京 30.2 18.5 神奈川 34.2 18.5 埼玉 29.8 16.4 千葉 27.5 14.7 と作成しました。 これを 最高気温 神奈川 34.2 最低気温 千葉  14.7 と表示したいのですが、現在は「0 0 0 0」と表示するだけです。 何卒、よろしくお願い致します。

  • javaの問題わからなくって質問します

    内容はEclipse上でプロジェクトフォルダを作りひとつは別のjavaファイルを動かすのともう一つはそのお同じフォルダから動かされるjavaプログラムです。 説明不足というかまだ触れてそんなにたってないのでソースを載せます class SampleManager { public static void main(String[] args){ exec obj= new exec(samlple1.java); obj.say(); } } class exec{ String phrase; exec(String phrase){ this.phrase=sample2.java; } void say(){ System.out.println(phrase); } } /////// public class samlple1 { public static String java; public static void exec(String[] args) {//execをした理由はSampleManagerにあるクラスexecを呼び出れるため System.out.println("Hello,World!")//この二つの出力結果を表示したい; System.out.println("こんにちは!"); } } ひとつのフォルダに上記のソースいれてSampleManager.java からsample.javaの出力結果の HelloWorld! こんにちは! を出力したいですがエラーはなく例外処理もありませんけど何故か出力結果はnullが返ってしまいます なぜでしょうか? アドバイスをお願いします

  • Javaについて教えてください。

    Javaのソースコードで以下のコードを実行すると表示されないのですがなぜでしょうか? public class Sample{ public static void main(String[] args){ for (int i = 0 ; i >= 5; i++){ System.out.println(i); } } }

専門家に質問してみよう