< prev index next >
src/hotspot/share/gc/shared/collectedHeap.cpp
Print this page
rev 49945 : imported patch 8191471-g1-varying-tlab-allocation
rev 49946 : imported patch 8191471-g1-retained-mutator-region
rev 49949 : imported patch 8191471-tschatzl-comments-open
rev 49950 : [mq]: 8191471-pliden-comments
*** 382,413 ****
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].
--- 382,420 ----
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 min_tlab_size = ThreadLocalAllocBuffer::compute_min_size(size);
! HeapWord* obj = Universe::heap()->allocate_new_tlab(min_tlab_size, new_tlab_size, &actual_tlab_size);
if (obj == NULL) {
+ assert(actual_tlab_size == 0, "Allocation failed, but actual size was updated. min: " SIZE_FORMAT ", desired: " SIZE_FORMAT ", actual: " SIZE_FORMAT,
+ min_tlab_size, new_tlab_size, actual_tlab_size);
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), min_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].
*** 504,514 ****
}
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) {
--- 511,523 ----
}
fill_with_object_impl(start, words, zap);
}
! HeapWord* CollectedHeap::allocate_new_tlab(size_t min_size,
! size_t requested_size,
! size_t* actual_size) {
guarantee(false, "thread-local allocation buffers not supported");
return NULL;
}
void CollectedHeap::ensure_parsability(bool retire_tlabs) {
< prev index next >