Make eager allocation site pretenuring decisions.
BUG= R=mvstanton@chromium.org Review URL: https://codereview.chromium.org/149393005 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18927 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
c911ec3322
commit
e5d9803c17
@ -491,7 +491,6 @@ void Heap::UpdateAllocationSiteFeedback(HeapObject* object) {
|
||||
ASSERT(heap->InNewSpace(object));
|
||||
|
||||
if (!FLAG_allocation_site_pretenuring ||
|
||||
!heap->new_space_high_promotion_mode_active_ ||
|
||||
!AllocationSite::CanTrack(object->map()->instance_type())) return;
|
||||
|
||||
// Either object is the last object in the from space, or there is another
|
||||
|
@ -506,8 +506,7 @@ void Heap::RepairFreeListsAfterBoot() {
|
||||
|
||||
|
||||
void Heap::ProcessPretenuringFeedback() {
|
||||
if (FLAG_allocation_site_pretenuring &&
|
||||
new_space_high_promotion_mode_active_) {
|
||||
if (FLAG_allocation_site_pretenuring) {
|
||||
int tenure_decisions = 0;
|
||||
int dont_tenure_decisions = 0;
|
||||
int allocation_mementos_found = 0;
|
||||
@ -1113,9 +1112,7 @@ bool Heap::PerformGarbageCollection(
|
||||
// to deoptimize all optimized code in global pretenuring mode and all
|
||||
// code which should be tenured in local pretenuring mode.
|
||||
if (FLAG_pretenuring) {
|
||||
if (FLAG_allocation_site_pretenuring) {
|
||||
ResetAllAllocationSitesDependentCode(NOT_TENURED);
|
||||
} else {
|
||||
if (!FLAG_allocation_site_pretenuring) {
|
||||
isolate_->stack_guard()->FullDeopt();
|
||||
}
|
||||
}
|
||||
|
@ -1512,17 +1512,11 @@ class Heap {
|
||||
8 * (Page::kPageSize > MB ? Page::kPageSize : MB);
|
||||
|
||||
intptr_t OldGenerationAllocationLimit(intptr_t old_gen_size) {
|
||||
const int divisor = FLAG_stress_compaction ? 10 :
|
||||
new_space_high_promotion_mode_active_ ? 1 : 3;
|
||||
const int divisor = FLAG_stress_compaction ? 10 : 1;
|
||||
intptr_t limit =
|
||||
Max(old_gen_size + old_gen_size / divisor,
|
||||
kMinimumOldGenerationAllocationLimit);
|
||||
limit += new_space_.Capacity();
|
||||
// TODO(hpayer): Can be removed when when pretenuring is supported for all
|
||||
// allocation sites.
|
||||
if (IsHighSurvivalRate() && IsStableOrIncreasingSurvivalTrend()) {
|
||||
limit *= 2;
|
||||
}
|
||||
intptr_t halfway_to_the_max = (old_gen_size + max_old_generation_size_) / 2;
|
||||
return Min(limit, halfway_to_the_max);
|
||||
}
|
||||
|
@ -12733,8 +12733,7 @@ void AllocationSite::ResetPretenureDecision() {
|
||||
PretenureFlag AllocationSite::GetPretenureMode() {
|
||||
PretenureDecision mode = pretenure_decision();
|
||||
// Zombie objects "decide" to be untenured.
|
||||
return (mode == kTenure && GetHeap()->GetPretenureMode() == TENURED)
|
||||
? TENURED : NOT_TENURED;
|
||||
return mode == kTenure ? TENURED : NOT_TENURED;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user