यह उत्तर 2011 में इस बात के दृष्टिकोण से लिखा गया था कि वास्तव में उस समय के ऑपरेटिंग सिस्टम पर चलने वाले समय का सूर्य JDK क्या करता है। वैसा बहुत समय पहले था! लेवेंटोव का जवाब एक अधिक अद्यतित परिप्रेक्ष्य प्रदान करता है।
वह पोस्ट गलत है, और nanoTime
सुरक्षित है। पोस्ट पर एक टिप्पणी है जो डेविड होम्स के एक ब्लॉग पोस्ट से लिंक करती है , जो सन में एक रियलटाइम और कंसीडर आदमी है। इसे कहते हैं:
System.nanoTime () QueryPerformanceCounter / QueryPerformanceFrequency API [...] का उपयोग करते हुए कार्यान्वित किया जाता है क्यूपीसी द्वारा उपयोग किया जाने वाला डिफ़ॉल्ट तंत्र हार्डवेयर एब्स्ट्रक्शन लेयर (एचएएल) द्वारा निर्धारित किया जाता है [...] यह डिफ़ॉल्ट परिवर्तन न केवल हार्डवेयर बल्कि ओएस पर भी होता है। संस्करणों। उदाहरण के लिए, Windows XP सर्विस पैक 2 ने प्रोसेसर टाइमस्टैम्प-काउंटर (TSC) के बजाय पावर मैनेजमेंट टाइमर (PMTimer) का उपयोग करने के लिए चीजों को बदल दिया क्योंकि TSC के साथ SMP सिस्टम में अलग-अलग प्रोसेसर पर सिंक्रनाइज़ नहीं होने के कारण समस्याएं हैं, और इस तथ्य के कारण आवृत्ति अलग-अलग हो सकते हैं (और इसलिए समय बीतने के साथ इसका संबंध) शक्ति-प्रबंधन सेटिंग्स के आधार पर।
इसलिए, विंडोज पर, यह WinXP SP2 तक एक समस्या थी , लेकिन यह अब नहीं है।
मैं अन्य प्लेटफ़ॉर्म के बारे में बात करने वाला एक भाग II (या अधिक) नहीं पा सकता हूं, लेकिन उस लेख में एक टिप्पणी शामिल है जिसमें लिनक्स ने उसी तरह से समस्या का सामना किया है और हल किया है, जिसमें FAQ के लिए एक लिंक क्लॉक_गेटटाइम (CLOCK_REALTIME) है , जो कहते हैं:
- क्या घड़ी_गेटाइम (CLOCK_REALTIME) सभी प्रोसेसर / कोर के पार है? (आर्च मैटर क्या है? उदाहरण पीपीसी, आर्म, x86, amd64, स्पार्क)।
इसे छोटी गाड़ी माना जाना चाहिए ।
हालाँकि, x86 / x86_64 पर, असंबद्ध या परिवर्तनशील freq TSCs समय असंगतियों को देखने के लिए संभव है। 2.4 गुठली वास्तव में इस के खिलाफ कोई सुरक्षा नहीं थी, और जल्दी से 2.6 गुठली भी यहाँ अच्छा नहीं किया। 2.6.18 तक और इसका पता लगाने के लिए तर्क बेहतर है और हम आम तौर पर एक सुरक्षित घड़ियों में वापस आ जाएंगे।
पीपीसी में हमेशा एक सिंक किया हुआ टाइमबेस होता है, इसलिए यह मुद्दा नहीं होना चाहिए।
इसलिए, यदि होम्स के लिंक को उस nanoTime
कॉल clock_gettime(CLOCK_REALTIME)
को लगाने के रूप में पढ़ा जा सकता है , तो यह x86 पर कर्नेल 2.6.18 के रूप में सुरक्षित-ईश है, और हमेशा पावरपीसी (क्योंकि आईबीएम और मोटोरोला, इंटेल के विपरीत, वास्तव में माइक्रोप्रोसेसरों को डिज़ाइन करना जानते हैं)।
दुख की बात है कि स्पार्क या सोलारिस का कोई उल्लेख नहीं है। और निश्चित रूप से, हमें पता नहीं है कि आईबीएम जेवीएम क्या करते हैं। लेकिन आधुनिक विंडोज और लिनक्स पर सन जेवीएम को यह अधिकार मिलता है।
EDIT: यह उत्तर उन स्रोतों पर आधारित है जो यह उद्धृत करता है। लेकिन मुझे अभी भी चिंता है कि यह वास्तव में पूरी तरह से गलत हो सकता है। कुछ और अप-टू-डेट जानकारी वास्तव में मूल्यवान होगी। मैं अभी लिनक्स की घड़ियों के बारे में चार साल के नए लेख के लिंक पर आया था जो उपयोगी हो सकता है।