< prev index next >
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZCollectedHeap.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, 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.
@@ -23,24 +23,26 @@
*/
package sun.jvm.hotspot.gc.z;
import java.io.PrintStream;
+import java.util.Iterator;
import sun.jvm.hotspot.debugger.Address;
import sun.jvm.hotspot.debugger.OopHandle;
import sun.jvm.hotspot.gc.shared.CollectedHeap;
import sun.jvm.hotspot.gc.shared.CollectedHeapName;
+import sun.jvm.hotspot.gc.shared.LiveRegionsClosure;
import sun.jvm.hotspot.runtime.VM;
import sun.jvm.hotspot.runtime.VMObjectFactory;
import sun.jvm.hotspot.types.Type;
import sun.jvm.hotspot.types.TypeDataBase;
+import sun.jvm.hotspot.utilities.BitMapInterface;
// Mirror class for ZCollectedHeap.
public class ZCollectedHeap extends CollectedHeap {
-
private static long zHeapFieldOffset;
static {
VM.registerVMInitializedObserver((o, d) -> initialize(VM.getVM().getTypeDataBase()));
}
@@ -68,28 +70,68 @@
public ZCollectedHeap(Address addr) {
super(addr);
}
- public OopHandle oop_load_at(OopHandle handle, long offset) {
- assert(!VM.getVM().isCompressedOopsEnabled());
+ @Override
+ public long capacity() {
+ return heap().capacity();
+ }
- Address oopAddress = handle.getAddressAt(offset);
+ @Override
+ public long used() {
+ return heap().used();
+ }
+
+
+ private OopHandle oop_load_barrier(Address oopAddress) {
oopAddress = ZBarrier.weak_barrier(oopAddress);
if (oopAddress == null) {
return null;
}
return oopAddress.addOffsetToAsOopHandle(0);
}
+ @Override
+ public OopHandle oop_load_at(OopHandle handle, long offset) {
+ assert(!VM.getVM().isCompressedOopsEnabled());
+
+ Address oopAddress = handle.getAddressAt(offset);
+
+ return oop_load_barrier(oopAddress);
+ }
+
+ // addr can be either in heap or in native
+ @Override
+ public OopHandle oop_load_in_native(Address addr) {
+ Address oopAddress = addr.getAddressAt(0);
+
+ return oop_load_barrier(oopAddress);
+ }
+
public String oopAddressDescription(OopHandle handle) {
Address origOop = ZOop.to_address(handle);
Address loadBarrieredOop = ZBarrier.weak_barrier(origOop);
if (!origOop.equals(loadBarrieredOop)) {
return origOop + " (" + loadBarrieredOop.toString() + ")";
} else {
return handle.toString();
}
}
+
+ @Override
+ public void liveRegionsIterate(LiveRegionsClosure closure) {
+ Iterator<ZPage> iter = heap().pageTable().activePagesIterator();
+ while (iter.hasNext()) {
+ ZPage page = iter.next();
+ closure.doLiveRegions(page);
+ }
+ }
+
+ @Override
+ public BitMapInterface createBitMap(long size) {
+ // Ignores the size
+ return new ZExternalBitMap(this);
+ }
}
< prev index next >