/* * Copyright (c) 2019, 2022, 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. *
*/
// A thread-local qset and queue. It provides an uncontended staging // area for completed buffers, to be flushed to the shared qset en masse. class G1RedirtyCardsLocalQueueSet : private PtrQueueSet { class Queue : public PtrQueue { public:
Queue(G1RedirtyCardsLocalQueueSet* qset);
~Queue() NOT_DEBUG(= default);
};
// Transfer all completed buffers to the shared qset. void flush();
};
// Card table entries to be redirtied and the cards reprocessed later. // Has two phases, collecting and processing. During the collecting // phase buffers are added to the set. Once collecting is complete and // processing starts, buffers can no longer be added. Taking all the // collected (and processed) buffers reverts back to collecting, allowing // the set to be reused for another round of redirtying. class G1RedirtyCardsQueueSet : public PtrQueueSet {
DEFINE_PAD_MINUS_SIZE(1, DEFAULT_CACHE_LINE_SIZE, 0);
BufferNode::Stack _list;
DEFINE_PAD_MINUS_SIZE(2, DEFAULT_CACHE_LINE_SIZE, sizeof(size_t)); volatile size_t _entry_count;
DEFINE_PAD_MINUS_SIZE(3, DEFAULT_CACHE_LINE_SIZE, sizeof(BufferNode*));
BufferNode* _tail;
DEBUG_ONLY(mutablebool _collecting;)
// Collect buffers. These functions are thread-safe. // precondition: Must not be concurrent with buffer processing. virtualvoid enqueue_completed_buffer(BufferNode* node); void add_bufferlist(const BufferNodeList& buffers);
// Processing phase operations. // precondition: Must not be concurrent with buffer collection.
BufferNode* all_completed_buffers() const;
BufferNodeList take_all_completed_buffers();
};
#endif// SHARE_GC_G1_G1REDIRTYCARDSQUEUE_HPP
Messung V0.5
¤ Dauer der Verarbeitung: 0.20 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.