Enhancement of finalizeObject
Kim, Jongwon (freefish)
freefish at netsgo.com
Tue Dec 8 21:28:11 PST 1998
The finalizeObject function lookups a final method every time.
It has much overhead in GC, especially with JIT mode.
Following codes make two times faster!!
Jongwon Kim
------------------------------------------------------------------------------------
-- classMethod.h --
...
struct Hjava_lang_Class {
Hjava_lang_Object head; /* A class is an object too */
...
Hjava_lang_ClassLoader* loader;
char state;
char final;
#ifdef FREEFISH_FIX
Method* finalMethod; /* pointer for final Method */
#endif
};
#ifdef FREEFISH_FIX
#define CLASS_FINAL_METHOD(CLASS) ((CLASS)->finalMethod)
#endif
--- gc-incremental.c ---
static
void
finalizeObject(void* ob)
{
Method* final;
#ifndef FREEFISH_FIX
final = findMethod(OBJECT_CLASS((Hjava_lang_Object*)ob), final_name, void_signature);
#else
Hjava_lang_Class* class = OBJECT_CLASS((Hjava_lang_Object*)ob);
if ((final = CLASS_FINAL_METHOD(class)) == 0) {
final = findMethod(OBJECT_CLASS((Hjava_lang_Object*)ob), final_name, void_signature);
CLASS_FINAL_METHOD(class) = final;
}
#endif
callMethodA(final, METHOD_INDIRECTMETHOD(final), (Hjava_lang_Object*)ob, 0, 0);
/*
* make sure thread objects get detached
*/
if (soft_instanceof(ThreadClass, ob)) {
finalizeThread((Hjava_lang_Thread*)ob);
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~
Kim, jongwon
freefish at chollian.net
freefish at netsgo.com
~~~~~~~~~~~~~~~~~~~~~~~~~
More information about the kaffe
mailing list