• 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...
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...