--- old/src/share/vm/gc/g1/workerDataArray.hpp 2017-06-12 13:27:21.896189410 +0200 +++ new/src/share/vm/gc/g1/workerDataArray.hpp 2017-06-12 13:27:21.774185637 +0200 @@ -33,20 +33,25 @@ template class WorkerDataArray : public CHeapObj { friend class WDAPrinter; +public: + static const uint MaxThreadWorkItems = 3; +private: T* _data; uint _length; const char* _title; - - WorkerDataArray* _thread_work_items; + + WorkerDataArray* _thread_work_items[MaxThreadWorkItems]; public: WorkerDataArray(uint length, const char* title); ~WorkerDataArray(); - void link_thread_work_items(WorkerDataArray* thread_work_items); - void set_thread_work_item(uint worker_i, size_t value); - WorkerDataArray* thread_work_items() const { - return _thread_work_items; + void link_thread_work_items(WorkerDataArray* thread_work_items, uint index = 0); + void set_thread_work_item(uint worker_i, size_t value, uint index = 0); + void add_thread_work_item(uint worker_i, size_t value, uint index = 0); + WorkerDataArray* thread_work_items(uint index = 0) const { + assert(index < MaxThreadWorkItems, "Tried to access thread work item %u max %u", index, MaxThreadWorkItems); + return _thread_work_items[index]; } static T uninitialized();