diff -r 3c048df3ef8b -r ee019285a52c src/share/vm/gc_implementation/g1/g1ParScanThreadState.cpp --- a/src/share/vm/gc_implementation/g1/g1ParScanThreadState.cpp Thu Aug 07 18:09:12 2014 -0700 +++ b/src/share/vm/gc_implementation/g1/g1ParScanThreadState.cpp Mon Aug 04 10:48:10 2014 -0700 @@ -288,7 +288,12 @@ } HeapWord* G1ParScanThreadState::allocate(GCAllocPurpose purpose, size_t word_sz) { - HeapWord* obj = alloc_buffer(purpose)->allocate(word_sz); + HeapWord* obj = NULL; + if (purpose == GCAllocForSurvived) { + obj = alloc_buffer(GCAllocForSurvived)->allocate_aligned(word_sz, SurvivorAlignmentInBytes); + } else { + obj = alloc_buffer(GCAllocForTenured)->allocate(word_sz); + } if (obj != NULL) { return obj; }