mozilla

Compare Revisions

Common causes of memory leaks in extensions

Change Revisions

Revision 49896:

Revision 49896 by Nmaier on

Revision 49897:

Revision 49897 by Nmaier on

Title:
Common causes of memory leaks in extensions
Common causes of memory leaks in extensions
Slug:
Extensions/Common_causes_of_memory_leaks_in_extensions
Extensions/Common_causes_of_memory_leaks_in_extensions
Tags:
Extensions, Add-ons, memory
Extensions, Add-ons, memory
Content:

Revision 49896
Revision 49897
n144      Another common cause of leaks is forgetting to <a href="/enn144      Another common cause of leaks is forgetting to <a href="/en
>/Components.utils.unload" title="Components.utils.unload">unload<>/Components.utils.unload" title="Components.utils.unload">unload<
>/a> JavaScript code modules in bootstrapped add-ons.&nbsp; These >/a> JavaScript code modules in bootstrapped add-ons. These leaks 
>leaks cannot be detected by looking at about:compartments or abou>cannot be detected by looking at about:compartments or about:memo
>t:memory because such modules live within the main System compart>ry because such modules live within the main System compartment.
>ment. 
tt149    <p>
150      The following example shows how to unload your modules agai
 >n (bootstrap.js):
151    </p>
152    <pre class="brush: js">
153Components.utils.import("resource://gre/modules/Services.jsm");
154 
155function startup(data, reason) {
156  // This assumes your add-on did register some chrome
157  Components.utils.import("chrome://myaddon/content/mymodule.jsm"
 >);
158}
159 
160function shutdown(data, reason) {
161  if (reason != APP_SHUTDOWN) {
162    // No need to do regular clean up when the application is clo
 >sed
163    // unless you need to break circular references that might ne
 >gatively
164    // impact the shutdown process.
165    return;
166  }
167 
168  // Your add-on needs to unload all modules it ships and importe
 >d!
169  Components.utils.unload("chrome://myaddon/content/mymodule.jsm"
 >);
170}
171</pre>
172    <div class="note">
173      <strong>Note:</strong> Modules not belonging to your add-on
 > — such as <a href="/en/JavaScript_code_modules/Services.jsm" tit
 >le="Services.jsm"><code>Services.jsm</code></a> — should <strong>
 >not</strong> be unloaded by your add-on, as this might cause erro
 >rs and/or performance regressions and will actually increase the 
 >memory usage.
174    </div>

Back to History