[heap] Get rid of discovered_ephemerons worklist

This CL drops `discovered_ephemerons` and simply pushes newly
discovered ephemerons into `next_ephemerons` instead. Conceptually
marking with ephemeron semantics will operate like this until
fixpoint:

1) Move `next_ephemerons` into `current_ephemerons`
2) Apply ephemeron semantics on all ephemerons in
   `current_ephemerons`
3) Drain marking worklist
4) Goto 1) if any object was marked

`discovered_ephemerons` was intended as an optimization and since we
anyways have to perform another iteration when we marked any object,
this also means that we will always perform another iteration as soon
when discovered_ephemerons is non-empty. So `discovered_ephemerons`
does not help us anymore.

The fixpoint iteration will behave like this:

0) `current_ephemerons` is empty and will not be used.
1) Add all `next_ephemerons` to key_to_values.
2) Drain marking worklist
3) Add new `next_ephemerons` to key_to_values.
4a) Good case: All discovered objects fit into vector. Simply iterate
               all discovered objects and perform map lookup in
               key_to_values_.
4b) Bad case:  Too many discovered objects. Iterate over all of
               key_to_values_ and apply ephemeron semantics if key
               is marked now.
5) Goto 2) if there is more work

Bug: 401897607
Change-Id: I637e210cf36eb8e5b74d5341ef6f295ab3e2f78b
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6329481
Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
Cr-Commit-Position: refs/heads/main@{#99149}
7 files changed
tree: 79276348cd132f9c10a3d8d7477f1f5e48c4a7b5
  1. .github/
  2. bazel/
  3. build_overrides/
  4. custom_deps/
  5. docs/
  6. gni/
  7. include/
  8. infra/
  9. samples/
  10. src/
  11. test/
  12. testing/
  13. third_party/
  14. tools/
  15. .bazelrc
  16. .clang-format
  17. .clang-tidy
  18. .editorconfig
  19. .flake8
  20. .git-blame-ignore-revs
  21. .gitattributes
  22. .gitignore
  23. .gn
  24. .mailmap
  25. .style.yapf
  26. .vpython3
  27. .ycm_extra_conf.py
  28. AUTHORS
  29. BUILD.bazel
  30. BUILD.gn
  31. CODE_OF_CONDUCT.md
  32. codereview.settings
  33. COMMON_OWNERS
  34. DEPS
  35. DIR_METADATA
  36. ENG_REVIEW_OWNERS
  37. INFRA_OWNERS
  38. INTL_OWNERS
  39. LICENSE
  40. LICENSE.fdlibm
  41. LICENSE.strongtalk
  42. LICENSE.v8
  43. LOONG_OWNERS
  44. MIPS_OWNERS
  45. MODULE.bazel
  46. OWNERS
  47. PPC_OWNERS
  48. PRESUBMIT.py
  49. pyrightconfig.json
  50. README.md
  51. RISCV_OWNERS
  52. S390_OWNERS
  53. WATCHLISTS
README.md

V8 JavaScript Engine

V8 is Google's open source JavaScript engine.

V8 implements ECMAScript as specified in ECMA-262.

V8 is written in C++ and is used in Google Chrome, the open source browser from Google.

V8 can run standalone, or can be embedded into any C++ application.

V8 Project page: https://v8.dev/docs

Getting the Code

Checkout depot tools, and run

    fetch v8

This will checkout V8 into the directory v8 and fetch all of its dependencies. To stay up to date, run

    git pull origin
    gclient sync

For fetching all branches, add the following into your remote configuration in .git/config:

    fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
    fetch = +refs/tags/*:refs/tags/*

Contributing

Please follow the instructions mentioned at v8.dev/docs/contribute.