Path: blob/master/runtime/gc_check/CheckRememberedSet.cpp
5990 views
/*******************************************************************************1* Copyright (c) 1991, 2014 IBM Corp. and others2*3* This program and the accompanying materials are made available under4* the terms of the Eclipse Public License 2.0 which accompanies this5* distribution and is available at https://www.eclipse.org/legal/epl-2.0/6* or the Apache License, Version 2.0 which accompanies this distribution and7* is available at https://www.apache.org/licenses/LICENSE-2.0.8*9* This Source Code may also be made available under the following10* Secondary Licenses when the conditions for such availability set11* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU12* General Public License, version 2 with the GNU Classpath13* Exception [1] and GNU General Public License, version 2 with the14* OpenJDK Assembly Exception [2].15*16* [1] https://www.gnu.org/software/classpath/license.html17* [2] http://openjdk.java.net/legal/assembly-exception.html18*19* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception20*******************************************************************************/2122#include "CheckEngine.hpp"23#include "CheckRememberedSet.hpp"24#include "ModronTypes.hpp"25#include "ScanFormatter.hpp"2627#if defined(J9VM_GC_GENERATIONAL)2829GC_Check *30GC_CheckRememberedSet::newInstance(J9JavaVM *javaVM, GC_CheckEngine *engine)31{32MM_Forge *forge = MM_GCExtensions::getExtensions(javaVM)->getForge();3334GC_CheckRememberedSet *check = (GC_CheckRememberedSet *) forge->allocate(sizeof(GC_CheckRememberedSet), MM_AllocationCategory::DIAGNOSTIC, J9_GET_CALLSITE());35if(check) {36new(check) GC_CheckRememberedSet(javaVM, engine);37}38return check;39}4041void42GC_CheckRememberedSet::kill()43{44MM_Forge *forge = MM_GCExtensions::getExtensions(_javaVM)->getForge();45forge->free(this);46}4748void49GC_CheckRememberedSet::check()50{51J9Object **slotPtr;52MM_SublistPuddle *puddle;53GC_RememberedSetIterator remSetIterator(&_extensions->rememberedSet);5455/* no point checking if the scavenger wasn't turned on */56if(!_extensions->scavengerEnabled) {57return;58}5960while((puddle = remSetIterator.nextList()) != NULL) {61GC_RememberedSetSlotIterator remSetSlotIterator(puddle);6263while((slotPtr = (J9Object **)remSetSlotIterator.nextSlot()) != NULL) {64if (_engine->checkSlotRememberedSet(_javaVM, slotPtr, puddle) != J9MODRON_SLOT_ITERATOR_OK ){65return;66}67}68}69}7071void72GC_CheckRememberedSet::print()73{74GC_RememberedSetIterator remSetIterator(&_extensions->rememberedSet);75J9Object **slotPtr;76MM_SublistPuddle *puddle;77GC_ScanFormatter formatter(_portLibrary, "RememberedSet Sublist", (void *)&_extensions->rememberedSet);78while ((puddle = remSetIterator.nextList()) != NULL) {79GC_RememberedSetSlotIterator remSetSlotIterator(puddle);80formatter.section("puddle", (void *) puddle);8182while((slotPtr = (J9Object **)remSetSlotIterator.nextSlot()) != NULL) {83formatter.entry((void *)*slotPtr);84}85formatter.endSection();86}87formatter.end("RememberedSet Sublist", (void *)&_extensions->rememberedSet);88}8990#endif /* J9VM_GC_GENERATIONAL */919293