/* * Copyright (c) 2011, 2018, 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. * */ package sun.jvm.hotspot.gc.g1; import java.util.Observable; import java.util.Observer; import sun.jvm.hotspot.debugger.Address; import sun.jvm.hotspot.runtime.VM; import sun.jvm.hotspot.runtime.VMObject; import sun.jvm.hotspot.types.CIntegerField; import sun.jvm.hotspot.types.Type; import sun.jvm.hotspot.types.TypeDataBase; // Mirror class for G1MonitoringSupport. public class G1MonitoringSupport extends VMObject { // bool _use_legacy_monitoring; static private CIntegerField useLegacyMonitoringField; // size_t _eden_space_committed; static private CIntegerField edenSpaceCommittedField; // size_t _eden_space_used; static private CIntegerField edenSpaceUsedField; // size_t _survivor_space_committed; static private CIntegerField survivorSpaceCommittedField; // size_t _survivor_space_used; static private CIntegerField survivorSpaceUsedField; // size_t _old_space_committed; static private CIntegerField oldSpaceCommittedField; // size_t _old_space_used; static private CIntegerField oldSpaceUsedField; // size_t _archive_space_committed; static private CIntegerField archiveSpaceCommittedField; // size_t _archive_space_used; static private CIntegerField archiveSpaceUsedField; // size_t _humongous_space_committed; static private CIntegerField humongousSpaceCommittedField; // size_t _humongous_space_used; static private CIntegerField humongousSpaceUsedField; static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { initialize(VM.getVM().getTypeDataBase()); } }); } static private synchronized void initialize(TypeDataBase db) { Type type = db.lookupType("G1MonitoringSupport"); useLegacyMonitoringField = type.getCIntegerField("_use_legacy_monitoring"); edenSpaceCommittedField = type.getCIntegerField("_eden_space_committed"); edenSpaceUsedField = type.getCIntegerField("_eden_space_used"); survivorSpaceCommittedField = type.getCIntegerField("_survivor_space_committed"); survivorSpaceUsedField = type.getCIntegerField("_survivor_space_used"); oldSpaceCommittedField = type.getCIntegerField("_old_space_committed"); oldSpaceUsedField = type.getCIntegerField("_old_space_used"); archiveSpaceCommittedField = type.getCIntegerField("_archive_space_committed"); archiveSpaceUsedField = type.getCIntegerField("_archive_space_used"); humongousSpaceCommittedField = type.getCIntegerField("_humongous_space_committed"); humongousSpaceUsedField = type.getCIntegerField("_humongous_space_used"); } public boolean useLegacyMonitoring() { return useLegacyMonitoringField.getValue(addr) != 0; } public long edenSpaceCommitted() { return edenSpaceCommittedField.getValue(addr); } public long edenSpaceUsed() { return edenSpaceUsedField.getValue(addr); } public long edenSpaceRegionNum() { return edenSpaceUsed() / HeapRegion.grainBytes(); } public long survivorSpaceCommitted() { return survivorSpaceCommittedField.getValue(addr); } public long survivorSpaceUsed() { return survivorSpaceUsedField.getValue(addr); } public long survivorSpaceRegionNum() { return survivorSpaceUsed() / HeapRegion.grainBytes(); } public long oldSpaceCommitted() { return oldSpaceCommittedField.getValue(addr); } public long oldSpaceUsed() { return oldSpaceUsedField.getValue(addr); } public long oldSpaceRegionNum() { return oldSpaceUsed() / HeapRegion.grainBytes(); } public long archiveSpaceCommitted() { return archiveSpaceCommittedField.getValue(addr); } public long archiveSpaceUsed() { return archiveSpaceUsedField.getValue(addr); } public long archiveSpaceRegionNum() { return archiveSpaceUsed() / HeapRegion.grainBytes(); } public long humongousSpaceCommitted() { return humongousSpaceCommittedField.getValue(addr); } public long humongousSpaceUsed() { return humongousSpaceUsedField.getValue(addr); } public long humongousSpaceRegionNum() { return humongousSpaceUsed() / HeapRegion.grainBytes(); } public G1MonitoringSupport(Address addr) { super(addr); } }