※ ChatGPTを利用し、要約された質問です(原文:javaのループ回数に関連する実行時間について)
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);』を実行する所要実行時間の最大値の差の原因についてコメントをください。アルゴリズムに誤りがあれば指摘してください。
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コマンドで計測しましたが、GCの発生した形跡 は無い様です。オプション-verbose:gc では表示されないのでしょうか? c:\pleiades44\java\8\bin\java -verbose:gc -cp ./class;./jar/* Sample61 以上