--- old/src/share/vm/gc/g1/g1ConcurrentMark.hpp 2016-09-13 11:46:16.606138946 +0200 +++ new/src/share/vm/gc/g1/g1ConcurrentMark.hpp 2016-09-13 11:46:16.452134151 +0200 @@ -190,7 +190,7 @@ // NULL if out of memory. OopChunk* allocate_new_chunk(); - size_t volatile _chunks_in_chunk_list; + volatile size_t _chunks_in_chunk_list; volatile bool _out_of_memory; @@ -200,6 +200,12 @@ // list is empty. OopChunk* remove_chunk_from_list(OopChunk* volatile* list); + void add_chunk_to_chunk_list(OopChunk* elem); + void add_chunk_to_free_list(OopChunk* elem); + + OopChunk* remove_chunk_from_chunk_list(); + OopChunk* remove_chunk_from_free_list(); + bool _should_expand; // Resizes the mark stack to the given new capacity. Releases any previous @@ -229,8 +235,8 @@ bool par_pop_chunk(oop* buffer); // Return whether the chunk list is empty. Racy due to unsynchronized access to - // _chunks_in_chunk_list. - bool is_empty() const { return _chunks_in_chunk_list == 0; } + // _chunk_list. + bool is_empty() const { return _chunk_list == NULL; } size_t capacity() const { return _chunk_capacity; }