• mvstanton's avatar
    [TypeFeedbackVector] Root feedback vectors at function literal site. · aea3ce3d
    mvstanton authored
    TypeFeedbackVectors are strongly rooted by a closure. However, in modern
    JavaScript closures are created and abandoned more freely. An important
    closure may not be present in the root-set at time of garbage collection,
    even though we've cached optimized code and use it regularly. For
    example, consider leaf functions in an event dispatching system. They may
    well be "hot," but tragically non-present when we collect the heap.
    
    Until now, we've relied on a weak root to cache the feedback vector in
    this case. Since there is no way to signal intent or relative importance,
    this weak root is as susceptible to clearing as any other weak root at
    garbage collection time.
    
    Meanwhile, the feedback vector has become more important. All of our
    ICs store their data there. Literal and regex boilerplates are stored there.
    If we lose the vector, then we not only lose optimized code built from
    it, we also lose the very feedback which allowed us to create that optimized
    code. Therefore it's vital to express that dependency through the root
    set.
    
    This CL does this by creating a strong link to a feedback
    vector at the instantiation site of the function closure.
    This instantiation site is in the code and feedback vector
    of the outer closure.
    
    BUG=v8:5456
    
    Review-Url: https://codereview.chromium.org/2674593003
    Cr-Commit-Position: refs/heads/master@{#42953}
    aea3ce3d
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
docs Loading commit data...
gni Loading commit data...
gypfiles 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...
.gitignore Loading commit data...
.gn 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...
Makefile Loading commit data...
Makefile.android 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...