--- old/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZHeap.java 2018-01-10 17:33:39.037597609 +0100 +++ new/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZHeap.java 2018-01-10 17:33:38.737587719 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 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 @@ -38,6 +38,7 @@ public class ZHeap extends VMObject { private static long pageAllocatorFieldOffset; + private static long pageTableFieldOffset; static { VM.registerVMInitializedObserver((o, d) -> initialize(VM.getVM().getTypeDataBase())); @@ -47,6 +48,7 @@ Type type = db.lookupType("ZHeap"); pageAllocatorFieldOffset = type.getAddressField("_page_allocator").getOffset(); + pageTableFieldOffset = type.getAddressField("_pagetable").getOffset(); } private ZPageAllocator pageAllocator() { @@ -54,6 +56,10 @@ return (ZPageAllocator)VMObjectFactory.newObject(ZPageAllocator.class, pageAllocatorAddr); } + ZPageTable pageTable() { + return new ZPageTable(addr.addOffsetTo(pageTableFieldOffset)); + } + public long maxCapacity() { return pageAllocator().maxCapacity(); } @@ -66,6 +72,20 @@ return pageAllocator().used(); } + boolean is_relocating(Address o) { + return pageTable().is_relocating(o); + } + + Address forward_object(Address addr) { + ZPage page = pageTable().get(addr); + return page.forward_object(addr); + } + + Address relocate_object(Address addr) { + ZPage page = pageTable().get(addr); + return page.relocate_object(addr); + } + public void printOn(PrintStream tty) { tty.print(" ZHeap "); tty.print("used " + (used() / 1024 / 1024) + "M, ");