গতির পার্থক্যের জন্য আমি কিছু নম্বর অনুপস্থিত ছিল। সুতরাং আমি তাদেরকে বেঞ্চমার্ক করার চেষ্টা করেছি যা এত সহজ ছিল না: জাভা লুপ কিছু রান / জেআইটির দোষের পরে ধীর হয়ে যায়?
অবশেষে আমি ক্যালিপার ব্যবহার করেছি এবং ফলাফলগুলি আমার হাতে টেস্ট চালানোর মতোই:
স্থির / গতিশীল কলগুলির জন্য কোনও পরিমাপযোগ্য পার্থক্য নেই। কমপক্ষে লিনাক্স / এএমডি 64 / জাভা 7 এর জন্য নয়।
ক্যালিপার ফলাফলগুলি এখানে রয়েছে: https://microbenchmark.appspot.com/runs/1426eac9-36ca-48f0-980f-0106af064e8f#r:scenario.benchmarkSpec.methodName , scenario.vmSpec.options.CMSLargeCoalSurpluspvarsurpluspv.sparspluspv.sparspluspv.svarspluspv.spar.plpc.sparsplus.png । সিএমএসলার্জস্প্লিটসর্প্লাস পারসেন্ট, সিভিনিউস.ভিএমএসপেক.প্পশনস.সিএমএস ম্যাসলকোয়েলসরাসপ্লাস পার্সেন্ট, সিভিনিউস.ভিএমএসপেক.পোশনস.সিএমএসম্যাসলস্প্লিটসর্প্লাসপ্রসেন্ট, সিভনস.ভিএমস্পেক.পোশনস.ফ্ল্যাসলার্জব্লকস্লাইসক্লিকসিসিভিশনসিসিভিশন, ক্রিসমিসিটি
এবং আমার নিজস্ব ফলাফল:
Static: 352 ms
Dynamic: 353 ms
Static: 348 ms
Dynamic: 349 ms
Static: 349 ms
Dynamic: 348 ms
Static: 349 ms
Dynamic: 344 ms
ক্যালিপার টেস্ট ক্লাসটি ছিল:
public class TestPerfomanceOfStaticMethodsCaliper extends Benchmark {
public static void main( String [] args ){
CaliperMain.main( TestPerfomanceOfStaticMethodsCaliper.class, args );
}
public int timeAddDynamic( long reps ){
int r=0;
for( int i = 0; i < reps; i++ ) {
r |= addDynamic( 1, i );
}
return r;
}
public int timeAddStatic( long reps ){
int r=0;
for( int i = 0; i < reps; i++ ) {
r |= addStatic( 1, i );
}
return r;
}
public int addDynamic( int a, int b ){
return a+b;
}
private static int addStatic( int a, int b ){
return a+b;
}
}
এবং আমার নিজের টেস্ট ক্লাসটি ছিল:
public class TestPerformanceOfStaticVsDynamicCalls {
private static final int RUNS = 1_000_000_000;
public static void main( String [] args ) throws Exception{
new TestPerformanceOfStaticVsDynamicCalls().run();
}
private void run(){
int r=0;
long start, end;
for( int loop = 0; loop<10; loop++ ){
start = System.currentTimeMillis();
for( int i = 0; i < RUNS; i++ ) {
r += addStatic( 1, i );
}
end = System.currentTimeMillis();
System.out.println( "Static: " + ( end - start ) + " ms" );
start = System.currentTimeMillis();
for( int i = 0; i < RUNS; i++ ) {
r += addDynamic( 1, i );
}
end = System.currentTimeMillis();
System.out.println( "Dynamic: " + ( end - start ) + " ms" );
System.out.println( r );
}
}
private int addDynamic( int a, int b ){
return a+b;
}
private static int addStatic( int a, int b ){
return a+b;
}
}