• kaznacheev@chromium.org's avatar
    Dynamically determine optimal instance size. · 06c86740
    kaznacheev@chromium.org authored
    The number of inobject properties used to be derived from the number
    of this property assignments in the constructor (and increased by 2 to
    allow for properties added later). This very often leads to wasted inobject 
    slots.
    
    This patch reclaims some of the unused inobject space by the following method:
     - for each constructor function the first several objects are allocated using the initial 
       ("generous) instance size estimation (this is called 'tracking phase').
     - during the tracking phase map transitions are tracked and actual property counts are collected.
     - at the end of the tracking phase instance sizes in the maps are decreased if necessary
       (starting with the function's initial map and traversing the transition tree).
     - all further allocation use more realistic instance size estimation.
    
    Shrinking generously allocated objects without costly heap traversal is made possible 
    by initializing their inobject properties with one_pointer_filler_map (instead of undefined). 
    
    The initial slack for the generous allocation is increased from 2 to 6 which really helps some tests.
    
    Review URL: http://codereview.chromium.org/3329019
    
    git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5510 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
    06c86740
Name
Last commit
Last update
benchmarks Loading commit data...
include Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
tools Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
ChangeLog Loading commit data...
LICENSE Loading commit data...
SConstruct Loading commit data...