So, zones are roughly analogous to a JSRuntime from the embedder's POV?

Wes

On 18 March 2013 14:19, Bill McCloskey <[email protected]> wrote:
> Hi everyone,
>
> Zones landed over the weekend and it looks like it's going to stick this
> time. I saw a few questions this morning on IRC about what the new
> invariants are, so I wrote a comment explaining things as best I could (bug
> 852229). I'm attaching it in the email. Any input would be welcome.
>
> /*
>  * A zone is a collection of compartments. Every compartment belongs to
> exactly
>  * one zone. In Firefox, there is roughly one zone per tab along with a
> system
>  * zone for everything else. Zones mainly serve as boundaries for garbage
>  * collection. Unlike compartments, they have no special security
> properties.
>  *
>  * Every GC thing belongs to exactly one zone. GC things from the same zone
> but
>  * different compartments can share an arena (4k page). GC things from
> different
>  * zones cannot be stored in the same arena. The garbage collector is
> capable of
>  * collecting one zone at a time; it cannot collect at the granularity of
>  * compartments.
>  *
>  * GC things are tied to zones and compartments as follows:
>  *
>  * - JSObjects belong to a compartment and cannot be shared between
>  *   compartments. If an object needs to point to a JSObject in a different
>  *   compartment, regardless of zone, it must go through a cross-compartment
>  *   wrapper. Each compartment keeps track of its outgoing wrappers in a
> table.
>  *
>  * - JSStrings do not belong to any particular compartment, but they do
> belong
>  *   to a zone. Thus, two different compartments in the same zone can point
> to a
>  *   JSString. When a string needs to be wrapped, we copy it if it's in a
>  *   different zone and do nothing if it's in the same zone. Thus,
> transferring
>  *   strings within a zone is very efficient.
>  *
>  * - Shapes and base shapes belong to a compartment and cannot be shared
> between
>  *   compartments. A base shape holds a pointer to its compartment. Shapes
> find
>  *   their compartment via their base shape. JSObjects find their
> compartment
>  *   via their shape.
>  *
>  * - Scripts are also compartment-local and cannot be shared. A script
> points to
>  *   its compartment.
>  *
>  * - Type objects and IonCode objects belong to a compartment and cannot be
>  *   shared. However, there is no mechanism to obtain their compartments.
>  *
>  * A zone remains alive as long as any GC things in the zone are alive. A
>  * compartment remains alive as long as any JSObjects, scripts, shapes, or
> base
>  * shapes within it are alive.
>  *
>  * We always guarantee that a zone has at least one live compartment by
> refusing
>  * to delete the last compartment in a live zone. (This could happen, for
>  * example, if the conservative scanner marks a string in an otherwise dead
>  * zone.)
>  */
>
> -Bill
> _______________________________________________
> dev-tech-js-engine-internals mailing list
> [email protected]
> https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals



-- 
Wesley W. Garland
Director, Product Development
PageMail, Inc.
+1 613 542 2787 x 102
_______________________________________________
dev-tech-js-engine-internals mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals

Reply via email to