mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 19:14:38 +02:00
6711316: Open source the Garbage-First garbage collector
First mercurial integration of the code for the Garbage-First garbage collector. Reviewed-by: apetrusenko, iveresov, jmasa, sgoldman, tonyp, ysr
This commit is contained in:
parent
39463bb3fc
commit
18f3386a98
215 changed files with 36088 additions and 1249 deletions
|
@ -134,14 +134,14 @@ class Klass_vtbl {
|
|||
// Every subclass on which vtbl_value is called must include this macro.
|
||||
// Delay the installation of the klassKlass pointer until after the
|
||||
// the vtable for a new klass has been installed (after the call to new()).
|
||||
#define DEFINE_ALLOCATE_PERMANENT(thisKlass) \
|
||||
#define DEFINE_ALLOCATE_PERMANENT(thisKlass) \
|
||||
void* allocate_permanent(KlassHandle& klass_klass, int size, TRAPS) const { \
|
||||
void* result = new(klass_klass, size, THREAD) thisKlass(); \
|
||||
if (HAS_PENDING_EXCEPTION) return NULL; \
|
||||
klassOop new_klass = ((Klass*) result)->as_klassOop(); \
|
||||
OrderAccess::storestore(); \
|
||||
post_new_init_klass(klass_klass, new_klass, size); \
|
||||
return result; \
|
||||
void* result = new(klass_klass, size, THREAD) thisKlass(); \
|
||||
if (HAS_PENDING_EXCEPTION) return NULL; \
|
||||
klassOop new_klass = ((Klass*) result)->as_klassOop(); \
|
||||
OrderAccess::storestore(); \
|
||||
post_new_init_klass(klass_klass, new_klass, size); \
|
||||
return result; \
|
||||
}
|
||||
|
||||
bool null_vtbl() { return *(intptr_t*)this == 0; }
|
||||
|
@ -694,6 +694,14 @@ class Klass : public Klass_vtbl {
|
|||
return oop_oop_iterate(obj, blk);
|
||||
}
|
||||
|
||||
#ifndef SERIALGC
|
||||
// In case we don't have a specialized backward scanner use forward
|
||||
// iteration.
|
||||
virtual int oop_oop_iterate_backwards_v(oop obj, OopClosure* blk) {
|
||||
return oop_oop_iterate_v(obj, blk);
|
||||
}
|
||||
#endif // !SERIALGC
|
||||
|
||||
// Iterates "blk" over all the oops in "obj" (of type "this") within "mr".
|
||||
// (I don't see why the _m should be required, but without it the Solaris
|
||||
// C++ gives warning messages about overridings of the "oop_oop_iterate"
|
||||
|
@ -722,7 +730,19 @@ class Klass : public Klass_vtbl {
|
|||
}
|
||||
|
||||
SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(Klass_OOP_OOP_ITERATE_DECL)
|
||||
SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_3(Klass_OOP_OOP_ITERATE_DECL)
|
||||
SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_DECL)
|
||||
|
||||
#ifndef SERIALGC
|
||||
#define Klass_OOP_OOP_ITERATE_BACKWARDS_DECL(OopClosureType, nv_suffix) \
|
||||
virtual int oop_oop_iterate_backwards##nv_suffix(oop obj, \
|
||||
OopClosureType* blk) { \
|
||||
/* Default implementation reverts to general version. */ \
|
||||
return oop_oop_iterate_backwards_v(obj, blk); \
|
||||
}
|
||||
|
||||
SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(Klass_OOP_OOP_ITERATE_BACKWARDS_DECL)
|
||||
SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_BACKWARDS_DECL)
|
||||
#endif // !SERIALGC
|
||||
|
||||
virtual void array_klasses_do(void f(klassOop k)) {}
|
||||
virtual void with_array_klasses_do(void f(klassOop k));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue