2012-07-21 1 views
23

मुझे पता है कि System.nanoTime() अब System.currentTimeInMillis() से अधिक समय मापने के लिए पसंदीदा तरीका है। पहला स्पष्ट कारण है नैनोटाइम() अधिक सटीक समय देता है और दूसरा कारण मैंने पढ़ा है कि बाद वाला सिस्टम की रीयल-टाइम घड़ी में समायोजन से प्रभावित होता है। "सिस्टम रीयल-टाइम घड़ी से प्रभावित होने" का क्या अर्थ है?System.currenTimeInMillis() बनाम System.nanoTime()

+0

मैं भी उत्सुक हूं। यदि आप डेलाइट बचत समय शिफ्ट के दौरान विलुप्त समय रिकॉर्ड करने के लिए 'currentTimeInMillis()' का उपयोग करने का प्रयास करते हैं तो क्या होगा? या वह इसका मतलब नहीं है? –

+3

क्या 'currentTimeMillis' मापने की कोशिश करता है वह भौतिक घटना के रूप में समय का प्रवाह है। एक डीएसटी शिफ्ट समय क्षेत्र में परिवर्तन के समान होती है जब आप यात्रा करते हैं: यह केवल प्रभावित करता है कि समय और मिनटों में समय का प्रतिनिधित्व कैसे किया जाता है; समय खुद प्रभावित नहीं है। – Joni

+2

'currentTimeMillis' उदा। डीएसटी, लेकिन यह उदास से प्रभावित है leapsconds और जैसे, 'नैनोटाइम' के विपरीत। –

उत्तर

25

इस मामले मैं ब्लॉग पोस्ट अंश उपयोगी निम्नलिखित पाया है में:

आप पूर्ण समय मापने तो हमेशा System.currentTimeMillis() का उपयोग में रुचि रखते हैं। जागरूक उसके समाधान काफी मोटे हो सकता है कि हो सकता है (हालांकि यह शायद ही कभी पूर्ण समय के लिए एक मुद्दा है।)

आप बीता हुआ समय की गणना मापने में रुचि रखते हैं /, तो हमेशा System.nanoTime() का उपयोग करें। अधिकांश प्रणालियों पर यह microseconds के क्रम पर संकल्प देगा। हालांकि सावधान रहें, यह कॉल कुछ प्लेटफ़ॉर्म पर निष्पादित करने के लिए माइक्रोसेकंड भी ले सकता है।

Clocks and Timers - General Overview डेविड होम्स द्वारा

System.currentTimeMillis() के बाद से सिस्टम दिन घड़ी की समय पर निर्भर है, समय के लिए समायोजन आदेश समय पर रखने के लिए वैध हैं।

यहां समायोजन का क्या अर्थ है? उदाहरण के लिए लिनक्स से CLOCK_REALTIME का विवरण पर एक नजर डालें:

प्रणाली चौड़ा घड़ी है कि वास्तविक (अर्थात, दीवार घड़ी) समय को मापता है। इस घड़ी को सेट करने के लिए उचित विशेषाधिकारों की आवश्यकता है। इस घड़ी प्रणाली समय में असंतत छलांग से प्रभावित है (जैसे, सिस्टम व्यवस्थापक मैन्युअल रूप से घड़ी को परिवर्तित करता है), और वृद्धिशील adjtime (3) और NTP द्वारा किया जाता समायोजन द्वारा।

System.nanoTime()

"दीवार ... यह विधि केवल बीता हुआ समय को मापने के लिए इस्तेमाल किया जा सकता है और सिस्टम या किसी भी अन्य धारणा से संबंधित नहीं है:

+0

यह आपके द्वारा प्रदान किए गए लिंक से है "सापेक्ष-समय घड़ी को System.nanoTime() विधि द्वारा दर्शाया जाता है जो नैनोसेकंड में" फ्री-रनिंग "समय देता है।" इसे "फ्री-रनिंग" समय क्यों कहा जाता है? – Geek

+0

@ गीक मैं * स्वतंत्र * के माध्यम से मुफ्त कहूंगा। पूर्ण समय ऑपरेटिंग सिस्टम द्वारा ट्रिगर किए गए इंटरप्ट पर निर्भर करता है। सापेक्ष * नि: शुल्क चलने वाला * समय उस से स्वतंत्र है, और जैसा कि जॉनी सैलोनन ने इंगित किया है, आंतरिक CPU घड़ी टाइमर से लिया गया है। –

+0

"सिस्टम में आम तौर पर एक पूर्ण घड़ी (कम रिज़ॉल्यूशन के साथ समय-समय पर घड़ी) और एक सापेक्ष घड़ी (कुछ प्रकार का" उच्च-रिज़ॉल्यूशन "काउंटर होता है जिसमें से" मुक्त-चलने वाले "समय की गणना की जा सकती है) दिन की घड़ी के समय में कम रिज़ॉल्यूशन क्यों होता है और रिश्तेदार के पास उच्च रिज़ॉल्यूशन होता है? – Geek

8

बस तरीकों में से JavaDoc जाँच घड़ी का समय। ... "

System.currentTimeMillis()

" ... मिलीसेकेंड में वर्तमान समय देता है। ... "

तो आप देख सकते हैं कि System.currentTimeMillis() का उपयोग कर माप के दौरान सिस्टम समय बदलता है, तो आप जिस अंतराल को मापते हैं वह भी बदल जाएगा। हालांकि, System.nanoTime() विधि का उपयोग करके अंतराल को मापते समय यह नहीं बदलेगा।

4

इसका मतलब है कि System.currentTimeMillis() रिटर्न का मूल्य मशीन की आंतरिक घड़ी से प्राप्त होता है। यदि एक sysadmin (या एनटीपी) समय बदलता है, उदाहरण के लिए यदि घड़ी 5 मिनट तेजी से चल रही है और sysadmin चला जाता है और इसे सुधारता है, System.currentTimeMillis() प्रभावित होगा।इसका मतलब यह है कि आप मूल्य घटाने को भी देख सकते हैं, और यदि आप अंतराल को मापने के लिए इसका उपयोग करते हैं तो समय समाप्त हो सकता है। आप नकारात्मक समय माप सकते हैं।

System.nanoTime() दूसरी तरफ कुछ आंतरिक CPU काउंटर/घड़ी से प्राप्त मूल्य लौटाता है। इस घड़ी द्वारा मापा गया समय किसी भी उपयोगकर्ता या कार्यक्रम द्वारा बदला नहीं जा सकता है। इसका मतलब है कि यह समय के लिए अधिक विश्वसनीय होगा। लेकिन सीपीयू घड़ी पावरऑफ पर रीसेट हो गई है, इसलिए यह वर्तमान "वॉल-घड़ी" समय खोजने के लिए उपयोगी नहीं है।

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