--- old/src/hotspot/share/gc/shared/threadLocalAllocBuffer.cpp 2017-10-31 13:44:21.871665496 -0700 +++ new/src/hotspot/share/gc/shared/threadLocalAllocBuffer.cpp 2017-10-31 13:44:21.539666823 -0700 @@ -128,7 +128,7 @@ } assert(!(retire || ZeroTLAB) || (start() == NULL && end() == NULL && top() == NULL && - actual_end() == NULL && slow_path_end() == NULL), + _actual_end == NULL && _slow_path_end == NULL), "TLAB must be reset"); } @@ -179,7 +179,7 @@ // actual refill. size_t old_bytes_until_sample = 0; if (_number_of_refills > 1) { - old_bytes_until_sample = bytes_until_sample(); + old_bytes_until_sample = _bytes_until_sample; } initialize(start, top, start + new_size - alignment_reserve()); @@ -326,8 +326,8 @@ } void ThreadLocalAllocBuffer::set_sample_end() { - size_t heap_words_remaining = _end - _top; - size_t bytes_left = bytes_until_sample(); + size_t heap_words_remaining = pointer_delta(_end, _top); + size_t bytes_left = _bytes_until_sample; size_t words_until_sample = bytes_left / HeapWordSize; if (heap_words_remaining > words_until_sample) { @@ -341,29 +341,30 @@ } } -void ThreadLocalAllocBuffer::pick_next_sample(size_t diff) { +void ThreadLocalAllocBuffer::pick_next_sample(size_t overflowed_words) { if (!HeapMonitoring::enabled()) { return; } - if (bytes_until_sample() == 0) { - HeapMonitoring::pick_next_sample(bytes_until_sample_addr()); + if (_bytes_until_sample == 0) { + HeapMonitoring::pick_next_sample(&_bytes_until_sample); } - if (diff > 0) { + if (overflowed_words > 0) { // Try to correct sample size by removing extra space from last allocation. - if (bytes_until_sample() > diff * HeapWordSize) { - set_bytes_until_sample(bytes_until_sample() - diff * HeapWordSize); + if (_bytes_until_sample > overflowed_words * HeapWordSize) { + set_bytes_until_sample(_bytes_until_sample - overflowed_words * HeapWordSize); } } set_sample_end(); log_trace(gc, tlab)("TLAB picked next sample: thread: " INTPTR_FORMAT " [id: %2d]" - " start: %p top: %p end: %p actual_end: %p slow_path_end: %p", + " start: " INTPTR_FORMAT " top: " INTPTR_FORMAT " end: " INTPTR_FORMAT " actual_end:" + INTPTR_FORMAT " slow_path_end: " INTPTR_FORMAT, p2i(myThread()), myThread()->osthread()->thread_id(), - start(), top(), end(), - actual_end(), slow_path_end()); + p2i(start()), p2i(top()), p2i(end()), + p2i(_actual_end), p2i(_slow_path_end)); } Thread* ThreadLocalAllocBuffer::myThread() { @@ -390,8 +391,8 @@ } size_t size_in_bytes = size * HeapWordSize; - if (bytes_until_sample() > size_in_bytes) { - set_bytes_until_sample(bytes_until_sample() - size_in_bytes); + if (_bytes_until_sample > size_in_bytes) { + set_bytes_until_sample(_bytes_until_sample - size_in_bytes); } else { // Technically this is not exactly right, we probably should remember how many bytes are // negative probably to then reduce our next sample size.