• 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
objects.cc 296 KB