2012-08-10 12 views
5

मैं परीक्षण किया गया था कुछ एल्गोरिदम जो मैं एक नैनोसेकंड टाइमर के साथ घिरा हुआ जब मैं बेतरतीब ढंग से टाइमर मैं कि इस कोड को पता चला दूर करने के लिए भूल गया:क्यों System.nanoTime() लेती है 4400 नैनो सेकंड

a = System.nanoTime(); 
    System.out.println(System.nanoTime() - a); 
हमेशा

प्रिंट मेरे सिस्टम पर 4400 नैनो सेकंड।

a = System.currentTimeMillis(); 
    for (int i = 0; i < 1000; i++) 
     System.nanoTime(); 
    System.out.println(System.currentTimeMillis() - a); 

प्रिंटों 0

+5

शीर्ष एस्वर को समझा जाना चाहिए http://stackoverflow.com/questions/1770010/how-do-i-measure-time-elapsed-in-java –

+0

यह संभव सटीकता के बारे में नहीं है? एक और प्रोसेसर आज़माएं :) – tomasb

उत्तर

4

4400 नैनोसेकंड 4.4 माइक्रोसेकंड, या 0.0044 मिलीसेकेंड है: यह इस कोड को जबकि 4.4 माइक्रोसेकंड होगा। दूसरा उदाहरण हमेशा शून्य प्रिंट करेगा क्योंकि विलुप्त समय अधिक एक मिलीसेकंड से भी कम है। फिर इस्तेमाल किए गए दो टाइमर के बीच मतभेद हैं: currentTimeMillis घड़ी के स्काई के लिए समायोजित किया जा सकता है जबकि nanoTime नहीं कर सकता है, लेकिन मुझे संदेह है कि यह यहां खेल रहा है।

+0

ओह मेरे भगवान मैं बहुत बेवकूफ हूँ ... मिलिस के लिए गलती माइक्रोस्कोप ... वैसे भी मैंने कोड अपडेट किया है, और यह अभी भी थोड़ा अजीब है। –

+1

वास्तविक सिस्टम टाइमर रिज़ॉल्यूशन नैनोसेकंड नहीं होना चाहिए। आपके मामले में यह 4.4 माइक्रोसॉन्ड हो सकता है (यानी यह सबसे छोटा संभव वृद्धि है) –

0

nanoseconds() का उपयोग करके खुद को मापने के लिए शायद लागूकर्ताओं के विचार का उपयोग नहीं किया गया था। आम तौर पर, आप इसे "धीमे" संचालन के समय, या "तेज" संचालन के लिए कई कॉलों का उपयोग करेंगे जो एक साथ "धीमे" होते हैं, जहां "धीमी" 0.1 मिलीसेकंड कहने पर कुछ भी है।

कारण आप लंबे समय तक परिचालन करना चाहते हैं nanoseconds() की ग्रैन्युलरिटी ठीक नहीं है - हार्डवेयर और ओएस पर निर्भर करता है लेकिन नैनोसेकंद के पास कहीं भी नहीं।

संबंधित मुद्दे