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

Reply via email to