package com.kdgregory.example.benchmark;

import java.lang.management.ManagementFactory;
import java.lang.management.ThreadMXBean;

/**
 *  A micro-benchmark that uses thread-level timing provided by JDK 1.5.
 */
public class Micro1withThreadTiming
{
    public static void main(String[] argv)
    throws Exception
    {
        ThreadMXBean threadMXB = ManagementFactory.getThreadMXBean();
        if (!threadMXB.isCurrentThreadCpuTimeSupported())
        {
            System.out.println("thread monitoring not supported by this JVM");
            System.exit(1);
        }
        
//        long start = threadMXB.getCurrentThreadCpuTime();
        long start = threadMXB.getCurrentThreadUserTime();
        
        for (int ii = 0 ; ii < 1000000 ; ii++)
        {
            String s = "this XXX a test".replaceAll("XXX", " is ");
        }
        
//        long elapsed = threadMXB.getCurrentThreadCpuTime() - start;
        long elapsed = threadMXB.getCurrentThreadUserTime() - start;
        System.out.println("elapsed time = " + elapsed + "ns");
        System.out.println((elapsed * 1.0) / 1000000 + " nanoseconds per execution");
    }
}
