/** * NOTE: this returns objects of type JavaThread, CompilerThread, JvmtiAgentThread, and * ServiceThread. The latter four are subclasses of the former. Most operations (fetching the top * frame, etc.) are only allowed to be performed on a "pure" JavaThread. For this reason, {@link * sun.jvm.hotspot.runtime.JavaThread#isJavaThread} has been changed from the definition in the VM * (which returns true for all of these thread types) to return true for JavaThreads and false for * the three subclasses. FIXME: should reconsider the inheritance hierarchy; see {@link * sun.jvm.hotspot.runtime.JavaThread#isJavaThread}. */ public JavaThread first() { Address threadAddr = threadListField.getValue(); if (threadAddr == null) { return null; } return createJavaThreadWrapper(threadAddr); }
public ThreadProxy getThreadProxy(Address addr) { // Addr is the address of the JavaThread. // Fetch the OSThread (for now and for simplicity, not making a // separate "OSThread" class in this package) Address osThreadAddr = osThreadField.getValue(addr); // Get the address of the _thread_id from the OSThread Address threadIdAddr = osThreadAddr.addOffsetTo(osThreadThreadIDField.getOffset()); JVMDebugger debugger = VM.getVM().getDebugger(); return debugger.getThreadForIdentifierAddress(threadIdAddr); }
public JNIHandleBlock next() { Address handleAddr = nextField.getValue(addr); if (handleAddr == null) { return null; } /* the next handle block is valid only if the current block is full */ if (top() < blockSizeInOops) { return null; } return new JNIHandleBlock(handleAddr); }
public String getDescription() { return CStringUtilities.getString(descriptionField.getValue(addr)); }
public Address getLastJavaFP(Address addr) { return lastJavaFPField.getValue( addr.addOffsetTo(sun.jvm.hotspot.runtime.JavaThread.getAnchorField().getOffset())); }
/** Breakpoint support (see methods on methodOop for details) */ public BreakpointInfo getBreakpoints() { Address addr = getHandle().getAddressAt(Oop.getHeaderSize() + breakpoints.getOffset()); return (BreakpointInfo) VMObjectFactory.newObject(BreakpointInfo.class, addr); }
// get associated compiled native method, if available, else return null. public NMethod getNativeMethod() { Address addr = code.getValue(getHandle()); return (NMethod) VMObjectFactory.newObject(NMethod.class, addr); }