• Benedikt Meurer's avatar
    [objects] Adjust overly aggressive over-allocation. · 9ffd1677
    Benedikt Meurer authored
    When setting up the initial map for a (class or function) constructor,
    we always over-allocate a bunch of in-object properties, in case not
    all property assignments happen as `this.prop = val` assignments in
    the constructor. However this over-allocation was a bit too aggressive
    and added a slack of 8 to each class constructor (plus a minimum of
    two, when there was no `this.prop = val` assignment). So in total this
    would yield an object with initially 40 in-object property slots in
    case of a simple class hierarchy like this:
    
    ```js
    class A {};
    class B extends A {};
    class C extends B {};
    class D extends C {};
    new D;
    ```
    
    While the slack tracking takes care of eventually shrinking the objects
    to appropriate sizes, this aggressive over-allocation is still going to
    hurt performance quite a bit in the beginning, and will also lead to
    more traffic on the minor GC for now good reason.
    
    Instead of the above, we now allocate a minimum of 2 in-object
    properties per class (in a hierarchy) and then add a slack of 8 in the
    end. Meaning for the example above we end up with 16 initial in-object
    property slots, which seems sensible.
    
    Bug: v8:8853
    Change-Id: I4a11e35a8612ceef1d776ca2f0543a26c8c2a2bf
    Reviewed-on: https://chromium-review.googlesource.com/c/1477276Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
    Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#59670}
    9ffd1677
Name
Last commit
Last update
..
benchmarks Loading commit data...
cctest Loading commit data...
common Loading commit data...
debugger Loading commit data...
fuzzer Loading commit data...
inspector Loading commit data...
intl Loading commit data...
js-perf-test Loading commit data...
memory Loading commit data...
message Loading commit data...
mjsunit Loading commit data...
mkgrokdump Loading commit data...
mozilla Loading commit data...
preparser Loading commit data...
test262 Loading commit data...
torque Loading commit data...
unittests Loading commit data...
wasm-js Loading commit data...
wasm-spec-tests Loading commit data...
webkit Loading commit data...
BUILD.gn Loading commit data...
OWNERS Loading commit data...