commit | b0499741d9cf4c53d63ef454afe8054925224db2 | [log] [tgz] |
---|---|---|
author | Dominik Inführ <dinfuehr@chromium.org> | Mon Mar 10 12:19:44 2025 |
committer | V8 LUCI CQ <v8-scoped@luci-project-accounts.iam.gserviceaccount.com> | Mon Mar 10 13:16:31 2025 |
tree | 79276348cd132f9c10a3d8d7477f1f5e48c4a7b5 | |
parent | cfa7eebb88b38cd68b611e043a70a44bc6460b54 [diff] |
[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}
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
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/*
Please follow the instructions mentioned at v8.dev/docs/contribute.