• Ulan Degenbaev's avatar
    [heap] Optimize marking of descriptor arrays. · 0400fc20
    Ulan Degenbaev authored
    Now a descriptor array tracks the number of descriptors that were
    already marked. The marking visitor of a map only marks the subset
    of the descriptors that it needs and that are not already marked.
    
    If a descriptor array is shared between M maps and has N descriptos,
    then the number of marking operations is reduced from O(M*N) to O(N).
    
    This patch also adds a marking barrier for descriptors.
    
    The marked descriptor counter in a descriptor array is not cleared
    after mark-compact GC. Instead, it embeds two bits from the global
    mark-compact epoch counter and is considered 0 if the bits do not match
    the current value of the global epoch counter.
    
    Bug: v8:8486
    Change-Id: I2a7822a6833f3143e1d351e5e4819c2ef2c07fb0
    Reviewed-on: https://chromium-review.googlesource.com/c/1382746
    Commit-Queue: Ulan Degenbaev <ulan@chromium.org>
    Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
    Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#58372}
    0400fc20
map-inl.h 27.8 KB