In a computer system having a multithreaded application and a generational
garbage collector that dynamically pre-tenures objects from a
predetermined number of candidate allocation sites, allocated byte
accounting is performed by each application thread using an array that
contains a number of entries equal to the total number of candidate sites
at any given time. Each array is indexed by a site number assigned to
that site and contains a bytes allocated count for that site. At
compilation time, object allocation code that is generated by the
compiler is modified to update an array entry associated with a site
number that is assigned when the site is selected as a candidate site.
Since each array is local to the thread that contains it, each thread can
write into its array without using atomic operations or locks.