|
|
@ -1,13 +1,17 @@ |
|
|
|
<h1 id="memoryusage">Memory usage</h1> |
|
|
|
|
|
|
|
<p>Duktape allocates memory on demand and doesn't require a pre-allocated heap. |
|
|
|
When you create a heap on a 32-bit system, Duktape needs about 46kB for the |
|
|
|
built-in Ecmascript objects (about 22kB with |
|
|
|
<a href="#memory-constrained-options">low memory options</a>). Additional |
|
|
|
memory is then allocated as needed for executing application scripts. |
|
|
|
Reference counting ensures there is very little unused allocated memory, the |
|
|
|
only exception being objects which participate in reference loops; these are |
|
|
|
collected eventually by mark-and-sweep.</p> |
|
|
|
When you create a heap on a 32-bit system, Duktape needs about 70kB for the |
|
|
|
built-in Ecmascript objects. With specific |
|
|
|
<a href="#memory-constrained-options">low memory options</a> initial memory |
|
|
|
usage is about 27kB. This can be further reduced to about 3kB when moving |
|
|
|
built-in objects and strings to ROM (read-only data section). It's also |
|
|
|
possible to move custom native bindings fully into ROM.</p> |
|
|
|
|
|
|
|
<p>After heap creation additional memory is then allocated as needed for |
|
|
|
executing application scripts. Reference counting ensures there is very |
|
|
|
little unused allocated memory, the only exception being objects which |
|
|
|
participate in reference loops; these are collected eventually by mark-and-sweep.</p> |
|
|
|
|
|
|
|
<p>The memory allocations needed by Duktape fall into two basic categories. |
|
|
|
First, there are a lot of small allocations between roughly 16 to 128 bytes |
|
|
@ -21,7 +25,9 @@ issue. On low memory environments, e.g. less than 1MB of system RAM, you may |
|
|
|
want to use a custom allocator to optimize memory usage. A pool-based |
|
|
|
allocator deals well with the small allocation churn without fragmentation |
|
|
|
issues. The downside is that you need to tune the memory pool sizes to match |
|
|
|
the concrete allocation patterns.</p> |
|
|
|
the concrete allocation patterns. You may want to use a pool allocator or a |
|
|
|
hybrid allocated if the platform allocation primitives perform poorly with |
|
|
|
a lot of small allocations.</p> |
|
|
|
|
|
|
|
<p>See <a href="#memory-constrained-options">low memory options</a> and |
|
|
|
<a href="https://github.com/svaarala/duktape/blob/master/doc/low-memory.rst">low-memory.rst</a> |
|
|
|