Reviewers: Mads Ager, Vitaly, antonm,
Description:
Dynamically determine optimal instance size.
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.
Please review this at http://codereview.chromium.org/3329019/show
SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/
Affected files:
M src/arm/builtins-arm.cc
M src/builtins.h
M src/handles.cc
M src/heap.cc
M src/ia32/assembler-ia32.h
M src/ia32/assembler-ia32.cc
M src/ia32/builtins-ia32.cc
M src/objects-inl.h
M src/objects.h
M src/objects.cc
M src/runtime.h
M src/runtime.cc
M src/x64/builtins-x64.cc
M test/cctest/test-api.cc
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev