--- old/src/share/vm/gc/g1/g1ConcurrentMarkObjArrayProcessor.hpp 2017-02-23 10:57:58.512758511 +0100 +++ new/src/share/vm/gc/g1/g1ConcurrentMarkObjArrayProcessor.hpp 2017-02-23 10:57:58.398755091 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,32 +36,22 @@ // This allows incremental processing of large objects. class G1CMObjArrayProcessor VALUE_OBJ_CLASS_SPEC { private: - // The bit mask for the continuation indicator of elements on the mark stack. - static const size_t ArraySliceBit = 1; - // Reference to the task for doing the actual work. G1CMTask* _task; - // Encodes the given address as a continuation "oop". - oop encode_array_slice(HeapWord* addr); - // Remove the continuation marker from the given oop from the mark stack. - HeapWord* decode_array_slice(oop value); - // Push the continuation at the given address onto the mark stack. void push_array_slice(HeapWord* addr); // Process (apply the closure) on the given continuation of the given objArray. size_t process_array_slice(objArrayOop const obj, HeapWord* start_from, size_t remaining); public: - static bool is_array_slice(void* obj) { return ((uintptr_t)obj & ArraySliceBit) != 0; } - static bool should_be_sliced(oop obj); G1CMObjArrayProcessor(G1CMTask* task) : _task(task) { } // Process the given continuation "oop". Returns the number of words scanned. - size_t process_slice(oop obj); + size_t process_slice(HeapWord* slice); // Start processing the given objArrayOop by scanning the header and pushing its // continuation. size_t process_obj(oop obj);