मैं परीक्षण करने के लिए कितना समय लगता जावा के लिए ले जाता है 0 से एक बड़ी संख्या के लिए गिनती के सरल कार्य करने के लिए निम्नलिखित कोड लिखा है:जावा के व्यवहार
public static void main(String[] args)
{
for(long k = 0 ; k <= 1000000000000000000L /* 18 zeros */ ; k++)
;
System.out.println("Finished");
}
मैं इस कार्यक्रम भाग गया और घंटों के लिए इंतजार किया। इतने लंबे समय तक इंतजार करने के बाद मेरे पास इस चलने वाले समय का अनुमान लगाने के लिए कुछ गणनाओं का जिक्र करने के अलावा कोई रास्ता नहीं था, और एक साधारण गणना के साथ मुझे आश्वस्त किया गया कि प्रोग्राम को आखिरकार संदेश प्रिंट करने के लिए 100 से अधिक वर्षों (सीपीयू के आधार पर) ले सकता है "ख़त्म होना"!
लेकिन उपरोक्त कोड को समाप्त करने के लिए जितना समय लगता है, निम्नलिखित कोड को आजमाने के बाद, मैंने अप्रत्याशित रूप से देखा कि संदेश समाप्त होने के बाद एक दूसरे के अंश में "समाप्त" संदेश मुद्रित किया गया था!
public static void main(String[] args)
{
int j;
for(int i = 0 ; i <= 1000000000 /* 9 zeros */ ; i++)
for(j = 0 ; j <= 1000000000 /* 9 zeros */ ; j++)
;
System.out.println("Finished");
}
कोड के इन दो टुकड़ों के साथ जावा के व्यवहार में क्या अंतर है? इंट संख्याओं के साथ जावा के व्यवहार के बीच वास्तव में कुछ अंतर होना चाहिए, और int के अलावा पूर्णांक प्रकारों के साथ इसका व्यवहार होना चाहिए।
मुझे उम्मीद है कि इन दोनों लूप को जेआईटी कंपाइलर द्वारा अनुकूलित किया जाएगा। ऐसा लगता है कि, लंबे समय से लूप को किसी भी कारण से अनुकूलित नहीं किया जा रहा है। – Vulcan
एसओ में पहले से ही एक ही सवाल है, लेकिन वहां कोई अच्छा जवाब नहीं दिया गया था। – user3437460