जावा 6 से जावा 7 तक के प्रवास को कैसे सही ठहराया जाए?


28

हम जावा 6 से जावा 7 की ओर पलायन कर रहे थे । यह परियोजना अनुसूची और जोखिम के पीछे है, इस स्थिति में यह जावा 6 का उपयोग करना जारी रखेगा।

जावा 7 में कौन से विशिष्ट सुधार हैं जिन्हें हम अपने प्रबंधक के पास वापस जा सकते हैं और उन्हें समझा सकते हैं कि JDK 7 का उपयोग करना महत्वपूर्ण है? बग फिक्स की तलाश है जिसे मैं ओरेकल जावा 7 (जावा 6 के संबंध में) के साथ उजागर कर सकता हूं। मेरे मामले में सुरक्षा, प्रदर्शन, जावा 2 डी / प्रिंटिंग आदि में सुधार अधिक बिक्री योग्य होगा। उदाहरण के लिए कंपाइलर ठीक करता है, ज्यादा इस्तेमाल नहीं होगा।

[मैं ओरेकल अडॉप्शन गाइड , बग डेटाबेस, स्टैक ओवरफ्लो पर सवाल जैसी कई साइटों से गुजर रहा हूं ]।

अद्यतन: उत्तर के लिए धन्यवाद। हमने अगली रिलीज़ के लिए अपडेट को फिर से शेड्यूल किया। हमें मिला क्लोजेस्ट सुरक्षा था। सबसे ज्यादा वोट दिए गए जवाब को स्वीकार करते हुए।


5
तुम भाग्यशाली हो। उन सवालों को देखते हुए जो अभी भी नियमित रूप से स्टैक ओवरफ्लो पर पॉप अप करते हैं , कुछ लोग अभी भी जावा 1.4 (एक प्लेटफ़ॉर्म 11 साल पुराना है!) के साथ फंस गए हैं।
जोकिम सॉर

3
अब आप अपग्रेड क्यों कर रहे हैं यदि आपको पहले से ही कुछ सुविधाओं के बारे में पता नहीं है जो आपको 7 में चाहिए? हो सकता है कि आप अपना समय बर्बाद कर रहे हों और आपको इस बारे में थोड़ा और सोचना चाहिए कि क्या आपको इसे उचित ठहराना चाहिए बजाय इसके कि आप इसे कैसे उचित ठहराएं।
ब्रायन ओकली

1
क्या यह सिर्फ मुझे है या शीर्षक पीछे है?
रादु मर्ज़िया

1
बड़ा सवाल यह है कि आप इतने कठिन समय को क्यों अपग्रेड कर रहे हैं? मैं एक हफ्ते में एक मिलियन लोकल प्रोजेक्ट को जावा 7 में अपग्रेड करने में सक्षम था। मुझे लगता है कि आपकी समस्याओं का जवाब यह विश्लेषण कर रहा है कि आप अपग्रेड करने में इतनी मेहनत क्यों कर रहे हैं।
एंड्रयू टी फिनेल

2
@ एंड्रयू फिननेल: क्षमा करें। मुझे नहीं लगता था कि यह प्रासंगिक था। वास्तविक पोर्टिंग एक सप्ताह से भी कम समय में पूरी हो गई थी। मुख्य रूप से सूर्य के स्वामित्व वाले एपीआई के कारण हमने उपयोग किया। यह कोड की वास्तविक संख्या (4million लगभग) की तुलना में एक फ़ंक्शन विशिष्ट संगतता प्रभावित कोड था। उपकरण के समर्थन जैसे विभिन्न कारकों के कारण देरी हुई थी- उदाहरण के लिए कोडर्ट 2.0 का उपयोग कर कवरेज। बस स्थिर है। एक और उपकरण तर्कसंगत कार्यात्मक परीक्षक था जिसे अपग्रेड की आवश्यकता थी (हमने ऐसा नहीं करने के लिए चुना)। हो सकता है कि मैं इस प्रयास को प्रभावित करने वाले समग्र कारकों पर एक नोट लिखूंगा ..
जयन

जवाबों:


44

जावा 6 इस साल फरवरी में ईओएल तक पहुंच गया है और अब आप सार्वजनिक अपडेट प्राप्त नहीं करेंगे (सुरक्षा सहित) जब तक आप बहुत महंगे उद्यम समर्थन नहीं खरीदते हैं।

वह सब कारण होना चाहिए।

इसके अलावा, भारी सबूत बताते हैं कि जावा रनटाइम के लिए पीछे की संगतता उत्कृष्ट है। संभावना है कि आपको केवल जावा 7 के साथ जावा 6 इंस्टॉलेशन को बदलना होगा और सभी एप्लिकेशन बिना किसी समस्या के काम करना जारी रखेंगे। बेशक, इसकी गारंटी नहीं है और व्यापक परीक्षणों की पुष्टि करने के लिए सिफारिश की जाती है कि वास्तव में कोई समस्या नहीं होगी।


2
यह एक स्वीकृत उत्तर होना चाहिए। जब भी विशेष रूप से जावा सहित विशेष उत्पाद अपडेट को सही ठहराने की आवश्यकता थी, तब ईओएल-तिथि आधारित तर्क मेरे लिए सबसे अच्छा काम साबित हुआ है। औचित्य पूरा करने के लिए, मैं बैकवर्ड बाइनरी संगतता के बारे में नोट भी जोड़ूंगा (अधिमानतः कुछ आधिकारिक ओरेकल स्टेटमेंट के साथ समर्थित) और अपडेट को धूम्रपान करने की आवश्यकता के बारे में एक नोट अपडेट के लिए (उदाहरण के लिए संस्करण में हार्डकोडेड संदर्भों पर कुछ अप्रत्याशित निर्भरताएं "" 6 "एप्लीकेशन कॉन्फिग्स में)
gnat

1
यह मूल रूप से एकमात्र कारण है कि ज्यादातर कंपनियां अपग्रेड करेंगी।
jwenting

माइकल, क्या आपके द्वारा बताए गए नोटों को जोड़ने का मतलब होगा ( आपके जवाब में संगतता और धूम्रपान परीक्षण पर स्पष्टीकरण )? पूर्णता के लिए इतना बोलने के लिए
gnat

1
@gnat: किया जाता है, हालांकि मुझे संदेह है कि जो लोग प्रवास के खिलाफ हैं उन्हें परीक्षण की आवश्यकता के बारे में बताया जाना चाहिए और न केवल धूम्रपान परीक्षणों की तुलना में अधिक। वहाँ सबसे निश्चित रूप से कभी-कभी गंभीर असंगतताएं होती हैं।
माइकल Borgwardt

@MichaelBorgwardt अच्छी तरह से, के बारे में बता रही है कि कुछ मुश्किल बात है और यह तकनीकी रूप से सही होने के बजाय सम्मोहक होने के बारे में अधिक है। मैं एक के लिए बल्कि उस तरह से स्पष्ट रूप से और स्पष्ट रूप से स्पष्ट रूप से सामान रखने का तरीका सीख गया जब लोग "परिवर्तन को रोकते हैं"। इस तरह का संकेत उन्हें संकेत देता है, "हम आपकी चिंताओं को सुनते हैं और साझा करते हैं, और हम भी चिंता करते हैं", उन्हें मूल्यवान महसूस करता है (जैसा कि अनदेखा किया गया है) ... और अंततः परिवर्तन की आसान स्वीकृति की ओर जाता है :)
gnat

29

सामान्य तौर पर, प्रोग्रामर पर चीजों को आसान बनाने के लिए काफी व्यापक परिवर्तन होते हैं। आपका प्रबंधक ऐसी चीज़ों के बारे में बहुत अधिक परवाह नहीं कर सकता है, लेकिन प्रोग्रामर बॉयलर टाइम कोड के बारे में सोचने में कम समय बिताते हैं, और इस प्रकार उनके पास अपने लागू होने के वास्तविक लक्ष्य के बारे में सोचने के लिए अधिक समय होता है, उन्हें दक्षता में वृद्धि करनी चाहिए, कीड़े कम करना चाहिए, आदि। जो एक बहुत शक्तिशाली तर्क हो सकता है । ओरेकल में परिवर्तनों की एक व्यापक सूची है , लेकिन यह बहुत लंबा है, इसलिए मैं जितना संभव हो उतना संक्षेप में बताऊंगा।

भाषा सुविधाओं में शामिल हैं:

  • जेनरिक पर कम बॉयलरप्लेट। कोड Map<String, String> myMap = new HashMap<String, String>();को कम किया जा सकता है Map<String, String> myMap = new HashMap<>()। कंपाइलर बाईं ओर से दाईं ओर आवश्यक जेनेरिक प्रकारों का अनुमान लगा सकता है, इसलिए आपका कोड पढ़ने में थोड़ा छोटा और तेज हो जाता है।
  • स्ट्रिंग्स अब स्विच स्टेटमेंट में काम करते हैं , .equals()विधि के शब्दार्थ का उपयोग करते हुए ==
  • स्वत: संसाधन प्रबंधन के साथ-साथ संसाधनों का उपयोग करना। यह कोड क्लीनर बनाता है, लेकिन पुरानी शैली की कोशिश / अंत में आधारित कोड पर भी एक फायदा है। यदि प्रयास वक्तव्य में एक अपवाद को फेंक दिया जाता है, और फिर बंद करते समय एक और फेंक दिया जाता है, तो कोड जो पारंपरिक कोशिश / अंत में बयान का उपयोग करता है, पूरी तरह से मूल अपवाद को खो देगा, और केवल उसी को पास करेगा जिसे अंततः ब्लॉक में फेंक दिया गया था। एक कोशिश के साथ संसाधनों के बयान में, रनटाइम अपवाद को दबा देगा कि बंद () कॉल को फेंक दिया जाता है, और मूल अपवाद को स्टैक तक बुलबुला कर देता है, इस धारणा के तहत कि यह मूल अपवाद वह है जो पहले सभी समस्याओं का कारण बना था। स्थान। इसके अतिरिक्त, कचरा कलेक्टर को अन्य अपवाद को छोड़ने के बजाय, यह दमन करीब-करीब अपवादों का उपयोग करके पुनर्प्राप्त करने की अनुमति देता है Throwable.getSuppressed
  • न्यूमेरिक लिटरल को पढ़ना आसान बनाया जा सकता है। सभी संख्यात्मक शाब्दिक अंडरस्कोर की अनुमति देते हैं , इसलिए चीजों int n = 1000000000को बहुत अधिक पठनीय बनाया जा सकता है int n = 1_000_000_000, जो एक अरब होने के रूप में पार्स करना बहुत आसान है, और बिना नोटिस के गलत तरीके से टाइप करना कठिन है। इसके अलावा, द्विआधारी शाब्दिक रूप में अनुमति दी जाती है 0b10110101, जिससे कोड तैयार होता है जो पढ़ने के लिए थोड़ा-सा क्षेत्र के साथ काम करता है।
  • एक ही कैच स्टेटमेंट को कई अपवाद प्रकारों से हैंडल करना , डुप्लिकेटिंग कोड को कम करना और बाद में रिफ्लेक्टर को आसान बनाना संभव है।

इन परिवर्तनों में से हर एक ऐसी चीज है जिसके बारे में आपका प्रबंधक सीधे ध्यान नहीं दे सकता है, लेकिन वे बिना किसी प्रयास और विचार के सही कोड लिखना थोड़ा आसान कर देते हैं, अपने दिमाग को उस वास्तविक तर्क पर केंद्रित करने के लिए स्वतंत्र होते हैं जिसे आप आजमा रहे हैं। लागू करने के लिए, और वे कोड को बाद में पढ़ना थोड़ा आसान बना देते हैं, जिससे डिबगिंग थोड़ी तेज़ हो जाती है।

एपीआई की ओर, कई एपीआई अद्यतन भी हुए हैं:

  • सुरक्षा-वार , कई एन्क्रिप्शन विधियों को जोड़ा / हटा दिया गया है, क्योंकि क्रिप्टो कभी आगे बढ़ता है।
  • फ़ाइल IO को बदल दिया गया है, ( यह एक बेहतर लिंक हो सकता है, हालांकि ) कई स्थानों पर कुछ बेहतर अमूर्तता को जोड़ता है। मैंने व्यक्तिगत रूप से नए IO सामान में डुबकी नहीं लगाई है, लेकिन यह एक बहुत ही उपयोगी ओवरहाल की तरह दिखता है, जिससे फाइलसिस्टम के साथ काम करना काफी आसान हो जाता है बिना दर्द के।
  • यूनिकोड का समर्थन यूनिकोड 6.0 तक है, साथ ही कई अन्य अंतर्राष्ट्रीयकरण संवर्द्धन भी हैं।
  • Java2D , जिसका आपने अपने प्रश्न में उल्लेख किया है, को बेहतर बनाया गया है। बेहतर लिनक्स फ़ॉन्ट समर्थन, आधुनिक मशीनों पर बेहतर X11 प्रतिपादन, और तिब्बती लिपियों का संचालन।

1
नाइट पिक: वास्तव में स्ट्रिंग स्विच "जैसे कि यह String.equalsविधि का उपयोग कर रहा था" संचालित होता है (आपके द्वारा जुड़े दस्तावेज़ से)। वास्तव में, संकलक अनुकूलन करने के लिए स्वतंत्र है ताकि String.equalsइसका उपयोग न किया जाए ... बशर्ते कि शुद्ध प्रभाव समान हो। (और मुझे उम्मीद है कि यह String.hashcodeस्विच मामलों की एक निश्चित संख्या से ऊपर का उपयोग करेगा ।)
स्टीफन सी।

आधी हकीकत। अधिकांश कंपाइलरों को एक टन अनुकूलन करने की अनुमति होती है, जो हालांकि शब्दार्थ को नहीं बदलते हैं, इसलिए यह अक्सर छोटी चीज़ों को इंगित करने के लिए अतिरेक होता है; मेरे पास केवल विशेष रूप से उल्लेख किया गया है। () स्पष्ट होना चाहिए कि मामले को नजरअंदाज नहीं किया गया है। बहरहाल, मैंने शब्दों को थोड़ा अपडेट किया है।
बिली मेलमैन

स्ट्रिंग स्विच की सिफारिश नहीं की जाती है क्योंकि आप एक अनबाउंड डोमेन पर स्विच करते हैं। Enums पर स्विच करना एक विशिष्ट मध्य मैदान है क्योंकि आपके पास स्ट्रिंग जैसा प्रतिनिधित्व हो सकता है, लेकिन अर्थ अर्थ के साथ। पूर्ण उत्तर के लिए ओह और +1 BTW।
मार्टिज़न वेरबर्ग

पूर्णांक स्थिरांक के बजाय एक स्विच स्टेटमेंट में तारों का उपयोग करने के क्या फायदे हैं?
जियोर्जियो

3
उनमें से एकमात्र व्यावसायिक कारण सुरक्षा वृद्धि हो सकती है। तकनीकी बारीकियों दोनों व्यापार लोगों के लिए बहस और पूरी तरह अप्रासंगिक हैं।
जुंटिंग

8

try-with-resource एक ऐसी सुविधा है जो जावा 7 के लिए अपग्रेड करने लायक है, यह सब अपने आप में है। संसाधन लीक / मेमोरी लीक जावा विकास में एक बड़ा जोखिम है और TWR उस जोखिम को काफी कम कर देता है।

मैं उस नई NIO.2 फ़ाइल को जोड़ दूंगा अमूर्त और असिंक्रोनस क्षमताएं भी चलती हैं यदि आपके एप्लिकेशन में फ़ाइल / नेटवर्किंग I / O सुविधाएँ हैं।


वे PermGen की जरूरत को कम कर रहे हैं और इसके बजाय Heap या देशी मेमोरी का उपयोग कर रहे हैं, मुझे यकीन नहीं है कि यह अब कहाँ संग्रहीत किया जाएगा। इसका मतलब जावा 8 से आपको दो अधिकतम मेमोरी पैरामीटर सेट करने की आवश्यकता नहीं होगी।
एंड्रयू टी फिनेल

कोशिश-के साथ संसाधनों की कोशिश के रूप में ही नहीं है, लेकिन कम बॉयलर के साथ?
jhewlett

1
मुझे लगता है कि विचार यह है कि कम बॉयलर का मतलब सही होना आसान है।
MatrixFrog

1
कम बॉयलर-प्लेट और सही समापन स्माइनेटिक्स। उन्हें पता चला कि OpenJDK के अंदर वे समय के 2/3 के बारे में मैन्युअल रूप से गलत कर रहे थे .... मुझे कोड के अन्य कॉर्पस में इसके अन्य उच्च प्रतिशत पर संदेह है।
मार्टिनेज वेरबर्ग

6

एक कारण हो सकता है कि आपको जावा 7 पर स्विच नहीं करना चाहिए : यदि आपको ओरेकल के वीएम का उपयोग करना है और आपका सॉफ़्टवेयर या तो एम्बेडेड हार्डवेयर पर चलता है या आप इसे एम्बेडेड हार्डवेयर के साथ वितरित करेंगे: ओरेकल ने जेआरई का लाइसेंस बदल दिया ताकि यह ऊपर लाइसेंस न हो शर्तें पूरी होती हैं; आपको Java SE एम्बेडेड लाइसेंस खरीदना होगा । देखें कि जावा एसई एंबेडेड के लिए "सामान्य उद्देश्य प्रणाली" का क्या अर्थ है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.