• Ulan Degenbaev's avatar
    [heap] Decouple the lifetime of a TracedNode from the target object · d7160560
    Ulan Degenbaev authored
    Currently a TracedNode of a TracedReference is freed only if its target
    V8 object is unreachable. This is problematic for TracedNodes created for
    long-living (or immortal) V8 objects and leads to memory leaks.
    
    This CL adds logic for collecting unreachable TracedNodes:
    1) Each TracedNode gets a markbit. Initially the markbit is set (i.e.
       we have black allocation for TracedNodes).
    2) During marking RegisterEmbedderReference sets the markbit of the
       corresonding TracedNode.
    3) In the atomic pause of Mark-Compact when TracedNodes are iterated,
       we check the markbits and free TracedNodes with cleared markbits.
       After this processing all markbits are cleared for the next GC.
    
    Note that the new logic does not apply to TracedNode that have
    callbacks and/or destructors.
    
    Bug: chromium:1029738
    Change-Id: I38e76a8b4a84170793998988b1a7962e40874428
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1948722
    Commit-Queue: Ulan Degenbaev <ulan@chromium.org>
    Reviewed-by: 's avatarOmer Katz <omerkatz@chromium.org>
    Reviewed-by: 's avatarHannes Payer <hpayer@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#65347}
    d7160560
Name
Last commit
Last update
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...
.flake8 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...
COMMON_OWNERS Loading commit data...
DEPS Loading commit data...
ENG_REVIEW_OWNERS Loading commit data...
INFRA_OWNERS Loading commit data...
INTL_OWNERS 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...
MIPS_OWNERS Loading commit data...
OWNERS Loading commit data...
PPC_OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...