मेमोरी लीकेज से बचना
Lua में लीकेज के सामान्य पैटर्न और उन्हें रोकने की रणनीतियाँ सीखें।
मेमोरी लीकेज से बचना, CoddyKit पर Lua Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Lua Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
Lua में मेमोरी लीक क्या है?
मेमोरी लीक तब होती है जब ऑब्जेक्ट मेमोरी में जमा होते रहते हैं, क्योंकि कोई संदर्भ GC को उन्हें कलेक्ट करने से रोकता है, जबकि प्रोग्राम को अब उनकी आवश्यकता नहीं होती।
सामान्य लीक: ग्लोबल संचय
ऑब्जेक्ट को किसी ग्लोबल तालिका में रखकर उन्हें हटाया न जाना, लीक का एक पारंपरिक उदाहरण है। ग्लोबल तालिका हमेशा GC रूट होती है।
local cache = {} -- global-like upvalue
function storeResult(key, val)
cache[key] = val -- never evicted!
endसुधार: सीमित कैश
कैश का आकार सीमित करें और LRU रणनीति या साधारण आकार-सीमा का उपयोग करके पुरानी प्रविष्टियाँ हटाएँ।
local MAX = 100
local function boundedStore(cache, key, val)
if #cache >= MAX then
table.remove(cache, 1) -- evict oldest
end
cache[key] = val
endसामान्य लीक: इवेंट लिसनर
किसी closure को इवेंट लिसनर के रूप में पंजीकृत करके कभी deregister न करने पर closure और उसके upvalues दोनों जीवित रहते हैं।
local listeners = {}
function on(event, fn)
listeners[event] = listeners[event] or {}
listeners[event][#listeners[event]+1] = fn
end
-- Always provide off() to deregister!सुधार: कमज़ोर लिसनर तालिकाएँ
लिसनर को कमज़ोर-वैल्यू वाली तालिका में रखें, ताकि subscriber ऑब्जेक्ट कलेक्ट होने पर उसका लिसनर अपने-आप हट जाए।
local listeners = setmetatable({}, {__mode = "v"})सामान्य लीक: बड़ी तालिकाओं को कैप्चर करने वाले closures
बड़ी तालिका को कैप्चर करने वाला closure उसे तब तक जीवित रखता है, जब तक closure जीवित रहता है, भले ही तालिका के केवल छोटे-से हिस्से की आवश्यकता हो।
local bigData = {-- 100MB of data --}
local fn = function()
return bigData[1] -- bigData stays alive!
endसुधार: आवश्यक मान निकालें
closure बनाने से पहले केवल आवश्यक मान निकालें, ताकि बड़ी तालिका को कलेक्ट किया जा सके।
local needed = bigData[1]
bigData = nil -- allow collection
local fn = function() return needed endCoroutine लीक
निलंबित coroutine जीवित रहती है और अपने सभी स्थानीय वेरिएबल रखती है। मृत coroutine (स्थिति "dead") को कलेक्ट किया जा सकता है। निलंबित coroutine का पता कभी न खोएँ।
स्ट्रिंग संचय
लूप में .. का उपयोग करके स्ट्रिंग को जोड़ने पर कई मध्यवर्ती स्ट्रिंग बनती हैं। बड़ी स्ट्रिंग को कुशलता से बनाने के लिए table.concat का उपयोग करें।
local parts = {}
for i = 1, 1000 do parts[i] = tostring(i) end
local result = table.concat(parts, ",")लीक की डिबगिंग
मेमोरी की वृद्धि मापने के लिए ऑपरेशन से पहले और बाद में collectgarbage("count") का उपयोग करें। लीक के स्रोत को सीमित करने के लिए संदिग्ध वृद्धि को लॉग करें।
local before = collectgarbage("count")
-- ... run operation ...
collectgarbage()
local after = collectgarbage("count")
print(("Delta: %.1f KB"):format(after - before))प्रोफ़ाइलिंग टूल
luamemprof जैसे टूल और कस्टम debug.sethook आवंटन काउंटर यह पता लगा सकते हैं कि कौन-से कोड पथ सबसे अधिक मेमोरी आवंटित करते हैं।
मेमोरी लीक प्रश्न
किस पैटर्न से मेमोरी लीक होने की सबसे अधिक संभावना है?
पुनरावृत्ति: मेमोरी लीक से बचना
Lua में लीक असीमित कैश, deregister न किए गए लिसनर, बड़ी तालिकाओं पर बने closures और भूली हुई निलंबित coroutine से होती हैं। लीक का पता लगाने और उन्हें रोकने के लिए कमज़ोर तालिकाएँ, सीमित कैश और collectgarbage("count") का उपयोग करें।
एआई शिक्षक के साथ Lua सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 40
- पाठ
- 159
अक्सर पूछे जाने वाले प्रश्न
क्या “मेमोरी लीकेज से बचना” पाठ निःशुल्क है?
हाँ — Lua Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “मेमोरी लीकेज से बचना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“मेमोरी लीकेज से बचना” में मैं क्या सीखूँगा?
Lua में लीकेज के सामान्य पैटर्न और उन्हें रोकने की रणनीतियाँ सीखें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Lua Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Lua Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Lua Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“मेमोरी लीकेज से बचना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Lua Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Lua Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Lua कचरा संग्राहक की मूल बातें
- कमज़ोर कुंजियाँ और कमज़ोर मान
- __gc के साथ फ़ाइनलाइज़र
- मेमोरी लीकेज से बचना