2009-11-05 18 views
12

मैं वर्तमान में एक खिलौना संकलक अनुवाद में जावा बाईटकोड को लक्षित कर लिख रहा हूँ।संकलक अनुकूलन: जावा बाईटकोड

मैं वहाँ विभिन्न सरल peephole अनुकूलन नहीं है जो .class फ़ाइल लिखने से पहले उत्सर्जित बाईटकोड में बनाया जा सकता है की एक सारांश, सूची के कुछ प्रकार, हो सकता है अगर जानना चाहते हैं। मैं वास्तव में कुछ पुस्तकालयों से अवगत हूं जिनके पास यह कार्यक्षमता है, लेकिन मैं इसे स्वयं लागू करना चाहता हूं।

+2

अधिकांश अनुकूलन जावा कंपाइलर में नहीं बल्कि रनटाइम में किए जाते हैं। रनटाइम अनुकूलन के बिना आपका लक्ष्य प्रदर्शन परिणाम या प्रदर्शन परिणाम है? –

+0

वास्तविक लक्ष्य कंपाइलर सीखना होगा। मुझे लगता है कि संकलन-समय में अनुकूलन मेरे लिए अधिक दिलचस्प बनाता है, इसलिए मैं देख सकता हूं कि क्या हो रहा है और इसे किसी अन्य सॉफ़्टवेयर में छोड़ने के बजाय इसे स्वयं लागू करें। –

उत्तर

19

आप Proguard के बारे में पता कर रहे हैं? http://proguard.sourceforge.net/

यह एक महान बाइटकोड अनुकूलक है जो कई अनुकूलन लागू करता है। सूची के लिए अक्सर पूछे जाने वाले प्रश्न देखें: http://proguard.sourceforge.net/FAQ.html

  • निरंतर अभिव्यक्ति का मूल्यांकन करें।
  • अनावश्यक फ़ील्ड एक्सेस और विधि कॉल हटाएं।
  • अनावश्यक शाखाओं को हटाएं।
  • अनावश्यक तुलना और उदाहरणों के उदाहरणों को हटाएं।
  • निकालें अप्रयुक्त कोड ब्लॉक।
  • मर्ज समान कोड ब्लॉक।
  • परिवर्तनीय आवंटन को कम करें।
  • केवल-पढ़ने वाले फ़ील्ड और अप्रयुक्त विधि पैरामीटर निकालें।
  • इनलाइन लगातार खेतों, विधि मानकों, और बदले मूल्यों।
  • इनलाइन तरीकों कि छोटी या केवल एक बार कहा जाता है।
  • सरल पूंछ प्रत्यावर्तन कॉल।
  • वर्गों और इंटरफेस मर्ज करें।
  • तरीकों, निजी स्थिर है, और अंतिम जब संभव।
  • कक्षाएं स्थिर और अंतिम जब संभव हो करें।
  • इंटरफेस है कि एकल कार्यान्वयन बदलें।
  • तरह की जगह ... * 2 से ... < < 1.
  • वैकल्पिक रूप से निकालें प्रवेश कोड 200 से अधिक peephole अनुकूलन निष्पादित करें।

मुझे यकीन है कि आप यह समझने के लिए स्रोत कोड में आगे देख सकते हैं कि उन्हें कैसे कार्यान्वित किया जाता है।

+0

क्या कोई .NET संस्करण है? – leppie

+0

कक्षाएं और इंटरफेस मर्ज करें: संकलक कैसे जानता है कि यह एक प्रकार पदानुक्रम को ध्वस्त कर सकता है? यह केवल निजी इंटरफेस के बारे में सुनिश्चित हो सकता है। –

+0

धन्यवाद, मैं इसे देख लूंगा। –

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