2009-04-03 8 views

उत्तर

16

आलसी आवंटन का मतलब है कि वास्तव में संसाधन की आवंटित होने तक इसका आवंटन नहीं किया जाता है। यह सिंगलटन ऑब्जेक्ट्स के साथ आम है, लेकिन कड़ाई से बोलते हुए, किसी भी समय संसाधन जितनी देर हो सके आवंटित किया जाता है, आपके पास आलसी आवंटन का एक उदाहरण है।

संसाधन की आवंटन में देरी होने तक आपको वास्तव में इसकी आवश्यकता होने तक, आप स्टार्टअप समय कम कर सकते हैं और यहां तक ​​कि आवंटन को पूरी तरह खत्म कर सकते हैं यदि आप वास्तव में ऑब्जेक्ट का उपयोग नहीं करते हैं। इसके विपरीत, आप उस संसाधन को पूर्व-आवंटित कर सकते हैं जिसे आप बाद में आवश्यकता के लिए उम्मीद कर सकते हैं, जो बाद में निष्पादन को स्टार्टअप समय के खर्च पर अधिक कुशल बना सकता है, और कार्यक्रम निष्पादन में बाद में आवंटन आवंटन की संभावना से बचाता है।

public class Widget { 
    private Widget singleton; 

    public static Widget get() { 
     if (singleton == null) { 
      singleton = new Widget(); 
     } 
     return singleton; 
    } 

    private Widget() { 
     // ... 
    } 

    // ... 
} 

कि इस कोड threadsafe नहीं है ध्यान दें है:

निम्नलिखित कोड एक lazily-आवंटित सिंगलटन का एक उदाहरण प्रदान करता है। ज्यादातर मामलों में, get() विधि तक पहुंच कुछ फैशन में सिंक्रनाइज़ की जानी चाहिए।

एक समान (और शायद अधिक सामान्य) अवधारणा lazy initialization है।

+0

शब्द "देर से वस्तुएं" और "आलसी init" समानार्थी हैं? इस पाठ के शीर्षक में * जावा कैसे प्रोग्राम: देर ऑब्जेक्ट्स संस्करण *? मैं googled लेकिन उस पाठ से परे कोई संदर्भ नहीं मिला। – hydeph

+1

@hydeph, ऐसा लगता है कि डीटेल के पास उस पुस्तक के दो संस्करण हैं, जिनमें से एक "देर से ऑब्जेक्ट्स" है, जहां प्रारंभिक अध्याय प्रक्रियात्मक शैली (और बाद में कक्षाएं/वस्तुओं को प्रस्तुत करना) में हैं और एक "प्रारंभिक वस्तुओं" के साथ, जहां वर्ग/वस्तुएं तुरंत पेश किया जाता है। वे इन शिक्षण शैलियों के बीच अंतर करने के लिए "देर से वस्तुओं" और "प्रारंभिक वस्तुओं" का उपयोग कर रहे हैं। आलसी शुरुआत के लिए इसका कोई संबंध नहीं है। –

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