--- a/hotspot/src/share/vm/oops/instanceOop.hpp Fri Apr 11 09:56:35 2008 -0400
+++ b/hotspot/src/share/vm/oops/instanceOop.hpp Sun Apr 13 17:43:42 2008 -0400
@@ -27,5 +27,26 @@
class instanceOopDesc : public oopDesc {
public:
+ // aligned header size.
static int header_size() { return sizeof(instanceOopDesc)/HeapWordSize; }
+
+ // If compressed, the offset of the fields of the instance may not be aligned.
+ static int base_offset_in_bytes() {
+ return UseCompressedOops ?
+ klass_gap_offset_in_bytes() :
+ sizeof(instanceOopDesc);
+ }
+
+ static bool contains_field_offset(int offset, int nonstatic_field_size) {
+ int base_in_bytes = base_offset_in_bytes();
+ if (UseCompressedOops) {
+ return (offset >= base_in_bytes &&
+ // field can be embedded in header, or is after header.
+ (offset < (int)sizeof(instanceOopDesc) ||
+ (offset-(int)sizeof(instanceOopDesc))/wordSize < nonstatic_field_size));
+ } else {
+ return (offset >= base_in_bytes &&
+ (offset-base_in_bytes)/wordSize < nonstatic_field_size);
+ }
+ }
};