< prev index next >
src/hotspot/share/gc/shared/collectedHeap.cpp
Print this page
rev 49851 : imported patch 8191471-g1-varying-tlab-allocation
rev 49852 : imported patch 8191471-g1-retained-mutator-region
*** 366,397 ****
if (new_tlab_size == 0) {
return NULL;
}
! // Allocate a new TLAB...
! HeapWord* obj = Universe::heap()->allocate_new_tlab(new_tlab_size);
if (obj == NULL) {
return NULL;
}
! AllocTracer::send_allocation_in_new_tlab(klass, obj, new_tlab_size * HeapWordSize, size * HeapWordSize, thread);
if (ZeroTLAB) {
// ..and clear it.
! Copy::zero_to_words(obj, new_tlab_size);
} else {
// ...and zap just allocated object.
#ifdef ASSERT
// Skip mangling the space corresponding to the object header to
// ensure that the returned space is not considered parsable by
// any concurrent GC thread.
size_t hdr_size = oopDesc::header_size();
! Copy::fill_to_words(obj + hdr_size, new_tlab_size - hdr_size, badHeapWordVal);
#endif // ASSERT
}
! thread->tlab().fill(obj, obj + size, new_tlab_size);
return obj;
}
size_t CollectedHeap::max_tlab_size() const {
// TLABs can't be bigger than we can fill with a int[Integer.MAX_VALUE].
--- 366,402 ----
if (new_tlab_size == 0) {
return NULL;
}
! // Allocate a new TLAB requesting new_tlab_size. Any size
! // between minimal and new_tlab_size is accepted.
! size_t actual_tlab_size = 0;
! size_t minimal_tlab_size = MAX2(ThreadLocalAllocBuffer::compute_min_size(size), MinTLABSize);
! HeapWord* obj = Universe::heap()->allocate_new_tlab(minimal_tlab_size, new_tlab_size, &actual_tlab_size);
if (obj == NULL) {
return NULL;
}
+ assert(actual_tlab_size != 0, "Allocation succeeded but actual size not updated. obj at: " PTR_FORMAT " min: " SIZE_FORMAT ", desired: " SIZE_FORMAT,
+ p2i(obj), minimal_tlab_size, new_tlab_size);
! AllocTracer::send_allocation_in_new_tlab(klass, obj, actual_tlab_size * HeapWordSize, size * HeapWordSize, thread);
if (ZeroTLAB) {
// ..and clear it.
! Copy::zero_to_words(obj, actual_tlab_size);
} else {
// ...and zap just allocated object.
#ifdef ASSERT
// Skip mangling the space corresponding to the object header to
// ensure that the returned space is not considered parsable by
// any concurrent GC thread.
size_t hdr_size = oopDesc::header_size();
! Copy::fill_to_words(obj + hdr_size, actual_tlab_size - hdr_size, badHeapWordVal);
#endif // ASSERT
}
! thread->tlab().fill(obj, obj + size, actual_tlab_size);
return obj;
}
size_t CollectedHeap::max_tlab_size() const {
// TLABs can't be bigger than we can fill with a int[Integer.MAX_VALUE].
*** 488,498 ****
}
fill_with_object_impl(start, words, zap);
}
! HeapWord* CollectedHeap::allocate_new_tlab(size_t size) {
guarantee(false, "thread-local allocation buffers not supported");
return NULL;
}
void CollectedHeap::ensure_parsability(bool retire_tlabs) {
--- 493,505 ----
}
fill_with_object_impl(start, words, zap);
}
! HeapWord* CollectedHeap::allocate_new_tlab(size_t min_word_size,
! size_t desired_word_size,
! size_t* actual_word_size) {
guarantee(false, "thread-local allocation buffers not supported");
return NULL;
}
void CollectedHeap::ensure_parsability(bool retire_tlabs) {
< prev index next >