flink-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Fangfengbin <fangfeng...@huawei.com>
Subject Test about Improve performance of call system.currentTimeMillis()
Date Thu, 13 Aug 2015 06:35:21 GMT
Hello!

I have a test about cost of System.currentTimeMillis() and my CLOCK.currentTimeMillis() .(
My clock will be a JVM singleton) 
Call currentTimeMillis function 100000000 times, System.currentTimeMillis() need about 1902ms
and my CLOCK.currentTimeMillis() only need 119ms.
The function performance is up to about 15 times. 
Next I will use a streaming job to test it.

This is my code:
#########
class MillisecondClock {
    private long rate = 0;
    private volatile long now = 0;

    private volatile boolean isRunning = true;
    
    private MillisecondClock(long rate) {
        this.rate = rate;
        this.now = System.currentTimeMillis();
        start();
    }

    private void start() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(isRunning)
                {
                    try {
                        Thread.sleep(rate);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    now = System.currentTimeMillis();
                }

            }
        }).start();
    }

    public long currentTimeMillis() {
        return now;
    }

    public static final MillisecondClock CLOCK = new MillisecondClock(1);
    

    public static void main(String[] args)
    {
        long nowTime = 0;
               
        //test system currentTimeMillis
        long startTime = System.currentTimeMillis();
        long endTime;
        for(int i = 0;i < 100000000;i++)
        {
            nowTime = System.currentTimeMillis();
        }
        endTime = System.currentTimeMillis();
        System.out.println("Time cost: " + (endTime-startTime));
        
        //test my currentTimeMillis
        CLOCK.start();
        startTime = System.currentTimeMillis();
        for(int i = 0;i < 100000000;i++)
        {
            nowTime = CLOCK.currentTimeMillis();
        }
        endTime = System.currentTimeMillis();
        System.out.println("Time cost: " + (endTime-startTime));        
        
    }
}
########

Regards
Fengbin Fang
Mime
View raw message