APIdia Launch Partner
Top Methods
sun.jvm.hotspot.types

public Interface TypeDataBase

Known Direct Implementers
sun.jvm.hotspot.types.basic.BasicTypeDataBase
Imports
java.util.Iterator, sun.jvm.hotspot.debugger.Address

Method Summary

Modifier and TypeMethod and Description
public boolean
addressTypeIsEqualToType(Address addr, Type type)

This is an experimental interface emulating C++'s run-time type information (RTTI) mechanism: determines whether the given address is a pointer to the start of a C++ object of precisely the given type -- it does not search superclasses of the type.

public Type
findDynamicTypeForAddress(Address addr, Type baseType)

Helper routine for guessing the most derived type of a polymorphic C++ object.

public long
getAddressSize()

Returns the size of a C address in bytes.

public Iterator<E>
getIntConstants()

Returns an Iterator over the String names of the integer constants in the database.

public Type
getJBooleanType()

Accessors for types representing the Java primitive types; used for both proper type checking and for walking down Java arrays.

public Type
public Type
public Type
public Type
public Type
public Type
public Type
public Iterator<E>
getLongConstants()

Returns an Iterator over the String names of the long constants in the database.

public long
getOopSize()

Returns the size of an oop in bytes.

public Iterator<E>
getTypes()

Returns an Iterator over the Types in the database.

public Type
guessTypeForAddress(Address addr)

Helper routine for guessing the most derived type of a polymorphic C++ object.

public Integer
lookupIntConstant(String constantName)

Equivalent to lookupIntConstant(constantName, true)

public Integer
lookupIntConstant(String constantName, boolean throwException)

public Long
lookupLongConstant(String constantName)

Equivalent to lookupLongConstant(constantName, true)

public Long
lookupLongConstant(String constantName, boolean throwException)

public Type
lookupType(String cTypeName)

Equivalent to lookupType(cTypeName, true)

public Type
lookupType(String cTypeName, boolean throwException)

For simplicity of the initial implementation, this is not guaranteed to work for primitive types.

Method Detail

addressTypeIsEqualToTypeback to summary
public boolean addressTypeIsEqualToType(Address addr, Type type)

This is an experimental interface emulating C++'s run-time type information (RTTI) mechanism: determines whether the given address is a pointer to the start of a C++ object of precisely the given type -- it does not search superclasses of the type. The convention is that this returns false for the null pointer. It is needed to allow wrapper Java objects of the appropriate type to be constructed for existing C++ objects of polymorphic type. This method is only intended to work for C++ types (implying that we should rename this package and the classes contained within back to "ctypes"). Further, since the vptr offset in an object is known at compile time but not necessarily at runtime (unless debugging information is available), it is reasonable for an implementation of this method to search nearby memory for the (known) vtbl value for the given type. For this reason, this method is not intended to support scans through memory finding C++ objects, but is instead targeted towards discovering the true type of a pointer assumed to be intact.

The reason this method was placed in the type database is that the latter is the first level at which it could be exposed, and placing it here could avoid modifying the Type interface. It is unclear what other, if any, vtbl access would be useful (or implementable), so we are trying to avoid changing interfaces at this point to support this kind of functionality.

This method necessarily does not support multiple inheritance.

findDynamicTypeForAddressback to summary
public Type findDynamicTypeForAddress(Address addr, Type baseType)

Helper routine for guessing the most derived type of a polymorphic C++ object. Requires a baseType that must be virtual so that lookup can be performed without false positives

getAddressSizeback to summary
public long getAddressSize()

Returns the size of a C address in bytes. This is currently needed in order to properly traverse an array of pointers. Traversing an array of structs, for example, is possible by looking up the type of the struct and multiplying the index by its size when indexing off of a base Address. (FIXME: what about alignment?)

getIntConstantsback to summary
public Iterator<E> getIntConstants()

Returns an Iterator over the String names of the integer constants in the database.

getJBooleanTypeback to summary
public Type getJBooleanType()

Accessors for types representing the Java primitive types; used for both proper type checking and for walking down Java arrays.

getJByteTypeback to summary
public Type getJByteType()
getJCharTypeback to summary
public Type getJCharType()
getJDoubleTypeback to summary
public Type getJDoubleType()
getJFloatTypeback to summary
public Type getJFloatType()
getJIntTypeback to summary
public Type getJIntType()
getJLongTypeback to summary
public Type getJLongType()
getJShortTypeback to summary
public Type getJShortType()
getLongConstantsback to summary
public Iterator<E> getLongConstants()

Returns an Iterator over the String names of the long constants in the database.

getOopSizeback to summary
public long getOopSize()

Returns the size of an oop in bytes. This is currently needed in order to properly traverse an array of oops; it is distinguished from the address size, above, because object pointers could conceivably have a different representation than direct pointers. Traversing an array of structs, for example, is possible by looking up the type of the struct and multiplying the index by its size when indexing off of a base Address.

getTypesback to summary
public Iterator<E> getTypes()

Returns an Iterator over the Types in the database.

guessTypeForAddressback to summary
public Type guessTypeForAddress(Address addr)

Helper routine for guessing the most derived type of a polymorphic C++ object. Iterates the type database calling addressTypeIsEqualToType for all known types. Returns a matching Type for the given address if one was found, or null if none was found.

lookupIntConstantback to summary
public Integer lookupIntConstant(String constantName)

Equivalent to lookupIntConstant(constantName, true)

lookupIntConstantback to summary
public Integer lookupIntConstant(String constantName, boolean throwException)
lookupLongConstantback to summary
public Long lookupLongConstant(String constantName)

Equivalent to lookupLongConstant(constantName, true)

lookupLongConstantback to summary
public Long lookupLongConstant(String constantName, boolean throwException)
lookupTypeback to summary
public Type lookupType(String cTypeName)

Equivalent to lookupType(cTypeName, true)

lookupTypeback to summary
public Type lookupType(String cTypeName, boolean throwException)

For simplicity of the initial implementation, this is not guaranteed to work for primitive types. If throwException is true, throws an (unspecified) run-time exception if the type is not found.