--- old/src/hotspot/share/gc/z/zRelocate.cpp 2018-09-18 21:52:00.616811059 +0200 +++ new/src/hotspot/share/gc/z/zRelocate.cpp 2018-09-18 21:52:00.313797992 +0200 @@ -22,6 +22,8 @@ */ #include "precompiled.hpp" +#include "gc/z/zAddress.inline.hpp" +#include "gc/z/zBarrier.inline.hpp" #include "gc/z/zHeap.hpp" #include "gc/z/zOopClosures.inline.hpp" #include "gc/z/zPage.hpp" @@ -35,12 +37,22 @@ _workers(workers) {} class ZRelocateRootsIteratorClosure : public ZRootsIteratorClosure { +private: + static void remap_address(HeapWord** p) { + *p = (HeapWord*)ZAddress::good_or_null((uintptr_t)*p); + } + public: virtual void do_thread(Thread* thread) { ZRootsIteratorClosure::do_thread(thread); // Update thread local address bad mask ZThreadLocalData::set_address_bad_mask(thread, ZAddressBadMask); + + // Remap TLAB + if (UseTLAB && thread->is_Java_thread()) { + thread->tlab().addresses_do(remap_address); + } } virtual void do_oop(oop* p) {