কম্পিউটার টিউটোরিয়াল

জাভা প্রোগ্রাম: মেথড এক্সিকিউশন টাইম (Execution Time) ক্যালকুলেট করা

এক্সিকিউশন টাইম মেজারমেন্ট কী?

একটি প্রোগ্রাম বা মেথড চালানোর 데 কতसमয় লাগে তা মাপা। পারফরম্যান্স অ্যানালাইসিস, বেঞ্চমার্কিং এবং অপ্টিমাইজেশনের জন্য এটি অত্যন্ত গুরুত্বপূর্ণ।

জাভাতে টাইম মেজারমেন্টের পদ্ধতিগুলো

ইনপুট ও আউটপুট উদাহরণ

ইনপুট:

Run the program

আউটপুট:

The program is being executed:
The Execution time of the program is: 620872 nanoseconds

অ্যালগরিদম

  1. প্রোগ্রাম শুরু করুন
  2. তিনটি লং ভেরিয়েবল ঘোষণা করুন: my_start_time, my_end_time, my_execution_time
  3. শুরুতে System.nanoTime() কল করে my_start_time-এ স্টোর করুন
  4. প্রোগ্রাম/মেথড এক্সিকিউট করুন
  5. শেষে System.nanoTime() কল করে my_end_time-এ স্টোর করুন
  6. my_execution_time = my_end_time - my_start_time ক্যালকুলেট করুন
  7. ফলাফল প্রদর্শন করুন
  8. প্রোগ্রাম শেষ করুন

উদাহরণ ১: বেসিক টাইমিং

public class Main {
    public static void main(String[] args) {
        long my_start_time, my_end_time, my_execution_time;
        my_start_time = System.nanoTime();
        System.out.println("The program is being executed:");
        my_end_time = System.nanoTime();
        my_execution_time = my_end_time - my_start_time;
        System.out.println("The Execution time of the program is: " + my_execution_time + " nanoseconds");
    }
}

উদাহরণ ২: কোড ব্লক টাইমিং

public class Main {
    public static void main(String[] args) {
        long my_start_time, my_end_time, my_execution_time;
        my_start_time = System.nanoTime();
        
        int my_input_1 = 100;
        int my_input_2 = 250;
        int my_sum = my_input_1 + my_input_2;
        
        System.out.println("The program is being executed:");
        my_end_time = System.nanoTime();
        my_execution_time = my_end_time - my_start_time;
        System.out.println("The Execution time of the program is: " + my_execution_time + " nanoseconds");
    }
}

বেশতর বাস্তব ব্যবহার: মেথড টাইমিং ইউটিলিটি

public class TimerUtil {
    public static long measureTime(Runnable task) {
        long start = System.nanoTime();
        task.run();
        long end = System.nanoTime();
        return end - start;
    }
    
    public static  T measureTimeWithResult(Callable task) throws Exception {
        long start = System.nanoTime();
        T result = task.call();
        long end = System.nanoTime();
        System.out.println("Execution time: " + (end - start) + " ns");
        return result;
    }
}

// ব্যবহার
long time = TimerUtil.measureTime(() -> {
    // টেস্ট করার কোড
    int sum = 0;
    for (int i = 0; i < 1000000; i++) sum += i;
});

JMH (Java Microbenchmark Harness) - প্রোফেশনাল বেঞ্চমার্কিং

সঠিক বেঞ্চমার্কের জন্য JMH ব্যবহার করুন (JVM ওয়ার্ম-আপ, JIT কম্পাইলেশন, ডেড কোড এলিমিনেশন হ্যান্ডল করে):

@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class MyBenchmark {
    @Benchmark
    public void testMethod() {
        // টেস্ট কোড
    }
}

সাধারণ ভুল এড়ানোর টিপস

  • System.currentTimeMillis() ব্যবহার করবেন না মাইক্রো-বেঞ্চমার্কের জন্য (রেজোলিউশন কম)
  • Warm-up রান করুন JIT কম্পাইলেশন হওয়ার আগে ফলাফল নাবেন না
  • ডেড কোড এলিমিনেশন এড়ান: রেজাল্ট ব্যবহার করুন (print বা return)
  • গারবেজ কালেকশন: মেজারমেন্টের মাঝপথে GC হলে ফলাফল বिगড়ে যেতে পারে
  • অ্যাবসোলিউট টাইমের বদলে রিলেটিভ কম্পের করুন (বেসলাইন বনাম অপ্টিমাইজড)

ফরম্যাটেড আউটপুট

long ns = end - start;
System.out.printf("Time: %,d ns = %.3f µs = %.3f ms%n", 
    ns, ns / 1_000.0, ns / 1_000_000.0);

উন্নত সংস্করণ: মাল্টিপল রান ও গড়

public static double averageTime(Runnable task, int runs) {
    long total = 0;
    for (int i = 0; i < runs; i++) {
        long start = System.nanoTime();
        task.run();
        total += System.nanoTime() - start;
    }
    return (double) total / runs;
}
  1. জাভা প্রোগ্রাম: বৃত্তের পরিধি (Perimeter) বের করার পদ্ধতি

  2. জাভা প্রোগ্রাম: ট্রাপিজিয়াম (Trapezium) এর ক্ষেত্রফল বের করার পদ্ধতি

  3. জাভা প্রোগ্রাম: আয়তের পরিসীমা নির্ণয়

  4. পাইথন প্রোগ্রাম রাউন্ড ট্রিপ টাইম (RTT) ক্যালকুলেট করার জন্য

কপিরাইট © https://bd.wsxdn.com সমস্ত অধিকার সংরক্ষিত
মেথডরেজোলিউশনব্যবহার
System.currentTimeMillis()মিলিসেকেন্ড (১/১০০০ সেকেন্ড)সাধারণ টাইমিং, দীর্ঘ আপারেশন
System.nanoTime()ন্যানোসেকেন্ড (১/১,০০০,০০০,০০০ সেকেন্ড)উচ্চ নির্ভুলতা, ছোট আপারেশন, বেঞ্চমার্ক
Instant.now() (Java 8+)ন্যানোসেকেন্ডমডার্ন API, টাইমজোন সাপোর্ট