2011-01-03 15 views
12

यह मेरी समझ है कि डिफ़ॉल्ट जावा (और इस प्रकार, Clojure) में इस्तेमाल classloader किसी भी गुमनाम बनाया है और lambdas और संवृति पर इस प्रकार कक्षाएं,, की ओर इशारा करने के लिए रखती है। ये कभी कचरा एकत्रित नहीं हैं, और इसलिए "स्मृति रिसाव" का प्रतिनिधित्व करते हैं। अज्ञात क्लासलोडर जोड़ने के लिए जावा 7 या 8 (https://blogs.oracle.com/jrose/entry/anonymous_classes_in_the_vm) के लिए कुछ जांच चल रही है जो इन कार्यों के संदर्भों को बनाए रखेगी। इसी समय लोग क्लोजर और स्कैला जैसी भाषाओं में लंबे समय से चलने वाले अनुप्रयोगों को लिखने से कैसे काम कर रहे हैं, जो इन संरचनाओं के उपयोग को प्रोत्साहित करते हैं?Clojure बंद और जीसी

वहाँ किसी भी संभावना है कि Clojure, अपने स्वयं के गुमनाम classloader प्रदान कर सकता है प्रणाली एक विस्तार है, लेकिन बनाया कक्षाएं पकड़े नहीं है?

+0

आपको क्या लगता है कि यह पहले से ही ऐसा नहीं करता है? Compiler.java पर एक नज़र डालें; क्लासलोडर बनाने के लिए कॉल की खोज करें। – bendin

उत्तर

13

से bendin के से ऊपर टिप्पणी, और जानकारी Clojure की खुशी, माइकल Fogus और क्रिस हाउसर द्वारा, अनुभाग में "संकलन समय बनाम रन-समय" (अध्याय 7, धारा 7.2) , फोगस और होसर समझाते हैं कि संकलन समय पर बाइट-कोड पर संकलित और अज्ञात फ़ंक्शंस संकलित किए जाते हैं और क्लोजर रिटर्न के उच्च-ऑर्डर फ़ंक्शन पर प्रत्येक कॉल को बंद करने के लिए एक नया इंस्टेंस देता है, न कि नई कक्षा ये उदाहरण, निश्चित रूप से, कचरा इकट्ठा किया जाएगा। चूंकि अज्ञात कार्यों और बंद होने की संख्या पर ऊपरी बाध्य एक स्पष्ट, संकलन-समय है, स्मृति कभी-कभी, कभी-कभी कोई समस्या नहीं होगी।

मेरे चिंता निराधार थे।

+2

इस सवाल पूछने के लिए धन्यवाद। भले ही आपकी चिंताएं निराधार हों, मैंने आपके प्रयासों से कुछ नया और उपयोगी सीखा। –