2011-01-19 11 views
7

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

इसे .Net/CLR में आवश्यक क्यों माना जाता है, लेकिन जावा/जेडीके में नहीं?

+1

वीईएल, वे .NET में क्या करते हैं? –

+0

संबंधित: http://stackoverflow.com/questions/1313922/step-through-jdk-source-code-in-intellij-idea – finnw

+0

क्या आप थोड़ा सा समझा सकते हैं, एक .NET विशेषज्ञ नहीं होने पर, मैं नहीं कर सकता अपने प्रश्न को समझो। – Riduidel

उत्तर

3

मुझे लगता है कि वे जावा में आसानी से पेश किए जा सकते हैं। मूल रूप से डीबग बिल्ड का मतलब है: डीबग प्रतीकों को शामिल करें और अनुकूलन अक्षम करें। रिलीज इसके विपरीत है। डीबग और रिलीज लक्ष्य विजुअल स्टूडियो द्वारा उत्पन्न होते हैं और अनिवार्य नहीं हैं। आप वीएस के बिना अपनी एमएसबील्ड स्क्रिप्ट लिख सकते हैं। तो आप डीबग और रिलीज लक्ष्यों के साथ जावा के लिए बिल्ड स्क्रिप्ट बना सकते हैं।

+0

इन।नेट, यदि आप रिलीज बिल्ड का उपयोग करते हैं, तो आपका स्वयं का कोड आसानी से डिबगबल नहीं होता है। जावा में, ऐसी कोई समस्या नहीं है। – ripper234

+1

@ ripper234 इस प्रकार जावा और .NET काम करता है। रिलीज/डीबग बिल्ड सिर्फ कंपाइलर स्विच का संग्रह है। उनके पीछे जादुई कुछ भी नहीं – Andrey

4

इससे पहले जावा कंपाइलर्स को सक्षम करने के लिए एक -O ध्वज था (स्रोत कोड) संकलन अनुकूलन। चूंकि जेडीके 1.2, -ओ ध्वज का कोई प्रभाव नहीं पड़ा और मेरा मानना ​​है कि ध्वज जेडीके 1.4 के साथ हटा दिया गया था। जैसे ही जावा रनटाइम में सुधार हुआ, यह शायद जेआरई के अनुकूलन को प्रतिनिधि करने के लिए अधिक से अधिक उचित हो गया, क्योंकि स्रोत कोड कंपाइलर को हार्डवेयर के बारे में बिल्कुल कोई जानकारी नहीं है, जो अंततः कोड निष्पादित करेगा।

this one जैसे लेख और documentation of the csc /optimize flag इंगित करता है कि सीएलआर कोड की वास्तविक पीढ़ी पर अनुकूलन का बहुत कम प्रभाव पड़ता है (यदि कोई है?)।/अनुकूलित ध्वज हालांकि संकलित असेंबली में एक झंडा सेट करता है, जो रनटाइम द्वारा लागू किए जाने वाले ऑप्टिमाइज़ेशन के स्तर को नियंत्रित करता है। मैंने कोशिश नहीं की है, लेकिन मैंने पढ़ा है कि रनटाइम अनुकूलित कोड आवश्यक रूप से डिबग करने योग्य नहीं है, हालांकि डीबग जानकारी शामिल है (/ अनुकूलित और/डीबग झंडे को सी # कंपाइलर के लिए स्वतंत्र रूप से सक्षम या अक्षम किया जा सकता है)

Ι वास्तव में संकलन समय पर क्रम अनुकूलन स्तर को नियंत्रित करने में बिंदु देख पा रहे हैं नहीं। जावा रनटाइम कई detailed options क्रम प्रदर्शन और अनुकूलन को नियंत्रित करने के लिए किया है, लेकिन इन जब JRE शुरू करने और संकलन समय पर नहीं परिभाषित किया जाना चाहिए।

4

सूर्य का javac कंपाइलर में डिबगिंग जानकारी की अवधारणा है जो संकलित वर्ग आउटपुट से (वैकल्पिक रूप से) छोड़ी जा सकती है।

the documentation को देखें, और बाहर की जाँच -g झंडा विकल्प:

-g 
    Generate all debugging information, including local 
    variables. By default, only line number and source 
    file information is generated. 
-g:none 
    Do not generate any debugging information. 
-g:{keyword list} 
    Generate only some kinds of debugging information, 
    specified by a comma separated list of keywords. 
    Valid keywords are: 
    source 
     Source file debugging information 
    lines 
     Line number debugging information 
    vars 
     Local variable debugging information 

ये हैं शायद काफी के रूप में बाईटकोड अनुकूलन नेट compilers प्रदर्शन कर सकते हैं के रूप में व्यापक नहीं है (जो मैं से परिचित नहीं हूँ, खेद) , लेकिन मुझे लगता है कि सिद्धांत में वे प्रदर्शन कारणों (छोटे वर्गीकरण, आदि) के लिए हैं।

प्रैक्टिस में मुझे दृढ़ता से संदेह है कि वे आधुनिक हार्डवेयर + जेवीएम पर रनटाइम प्रदर्शन में बहुत अंतर नहीं करेंगे, लेकिन वे वहां हैं।

0

http://blogs.msdn.com/b/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx जब अनुकूलन स्विच पर (यह रिहाई के लिए पर है, डिबग के लिए बंद) है अनुकूलन कि प्रदर्शन कर रहे हैं का एक अच्छा सूची है।

जावा कंपाइलर इनमें से कोई भी कर सकता है, और यह वैसे भी डिफ़ॉल्ट रूप से उनमें से कुछ कर सकता है। वे ज्यादातर छोटी जीत हैं।

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