• 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
js-objects.cc 218 KB