[kaffe] Object Allocation in the heap

Timothy Stack stack@cs.utah.edu
Fri Apr 25 08:08:01 2003


> Hello All,

hi,

>   I was trying to trace through the life-time of an object: what calls the 
> vm makes to allocate an object, and where the object is actually placed 
> etc... one thing that puzzles me is this:
>   in gc_heap_malloc(), essentially a block (small or large depending on 
> size) is removed from the freelist, memset-ted to zero, and returned.

correct

> but 
> from the object data structure in java_lang_Object.h, i thought that the 
> object was supposed to look like
>    typedef struct Hjava_lang_Object {
>      struct _dispatchTable*  dtable;
>      struct _iLock*               lock;
>      /* Data follows on immediately */
>    } Hjava_lang_Object;

The allocator is used for non-Java objects as well, so this structure is 
only overlayed on the memory if it is meant to be used by java code.

> and there's a macro in object.h
> #define OBJECT_DATA(OBJ) ((void*)((Hjava_lang_Object*)(OBJ)+1))

The Hjava_lang_Object structure is just a header, the actual data 
contained within the object would start at the address returned by this 
macro.

>   so in essence, if we just take a block from the heap, and allocate it with 
> just enough memory for the object data, 

Well, the actual size needs to contain the object data + the 
Hjava_lang_Object header + a GC internal header.

> and memset the whole of it to zero,
> then where does the metadata(the dtable and the lock) go?

In the header, which is setup by the newObject functions in 
kaffe/kaffevm/object.c.

> or even 
> alternatively, given just a heap block how would i find the metadata for 
> that object? i would be very grateful if someone could give me some pointers 
> here!
> cheers!
> --xubacs

tim stack