37 #include "native/include/java_lang_String.h"
68 if ((bytelength & 0x03) == 0) {
70 wordcount = (bytelength >> 2);
95 GC_LOG(
dolog(
"GC: Updating all references (offset=%x) ...", offset); );
97 start = region->
base - offset;
98 end = region->
ptr - offset;
99 GC_LOG(
printf(
"Region previously was [ %p ; %p]\n", start, end); );
107 for (i = 0; i < rs->
refcount; i++) {
117 *refptr = ((
u1 *) ref) + offset;
128 while (o < region->ptr) {
137 GC_LOG2(
printf(
"\tarray-entry %p -> %p\n", (
void *) ref, ((
u1 *) ref) + offset); );
140 *refptr = ((
u1 *) ref) + offset;
149 GC_LOG2(
printf(
"\tobject-field %p -> %p\n", (
void *) ref, ((
u1 *) ref) + offset); );
152 *refptr = ((
u1 *) ref) + offset;
176 vm_abort(
"heap_increase_size: reached maximal heap size: out of memory");
180 dolog(
"GC: Increasing Heap Size to %d bytes", newsize);
181 GC_LOG(
dolog(
"GC: Increasing Heap Size to %d bytes", newsize); );
187 if (resize_offset != 0)
190 dolog(
"GC WARNING: References are not updated after heap resizing!");
195 GC_LOG(
dolog(
"GC: Increasing Heap Size was successful");
217 GC_LOG2(
dolog(
"GC: Hash re-taken: %d (0x%08x)", hashcode, hashcode); );
224 GC_LOG2(
dolog(
"GC: Hash taken: %d (0x%08x)", hashcode, hashcode); );
240 #if !defined(NDEBUG) && defined(ENABLE_THREADS)
254 if (opt_GCStress && collect)
259 if (bytelength > region->
free) {
260 dolog(
"GC: Region out of memory! (collect=%d)", collect);
267 if (region->
free < bytelength) {
268 dolog(
"GC: OOM OOM OOM OOM OOM OOM OOM OOM OOM OOM");
279 region->
ptr += bytelength;
280 region->
free -= bytelength;
287 MSET(p, 0,
u1, bytelength);
308 #if defined(ENABLE_RT_TIMING)
309 struct timespec time_start, time_end;
312 RT_TIMING_GET_TIME(time_start);
320 #if defined(GCCONF_HDRFLAG_REFERENCING)
323 if (references != 0) {
329 if (finalizer != NULL) {
337 RT_TIMING_GET_TIME(time_end);
338 RT_TIMING_TIME_DIFF(time_start, time_end, RT_TIMING_GC_ALLOC);
378 printf(
"Current Heap Usage: Size=%d Free=%d\n",
389 printf(
"0x%02x [%s%s%s%s]",
412 #if SIZEOF_VOID_P == 8
413 printf(
"0x%016llx: ", (
unsigned long long) o);
415 printf(
"0x%08lx: ", (
unsigned long) o);
422 printf(
"<<< No Heap Reference >>>");
443 }
else if ( o->vftbl->arraydesc != NULL) {
488 while (o < region->ptr) {
501 o = ((
u1 *) o) + o_size;
504 printf(
"Heap-Dump finished.\n");
524 o_size = o_size << 2;
544 GC_LOG(
dolog(
"Got size (from Class): %d bytes", o_size); );
554 o_size += SIZEOF_VOID_P;
#define GC_IS_MARKED(obj)
void gc_collect(s4 level)
rootset_entry_t refs[ROOTSET_INITIAL_CAPACITY]
void class_print(classinfo *c)
void utf_display_printable_ascii_classname(Utf8String u)
#define LOCK_MONITOR_EXIT(o)
static java_object_t * heap_alloc_intern(u4 bytelength, regioninfo_t *region, bool collect)
s4 heap_get_hashcode(java_object_t *o)
#define POINTS_INTO(ptr, ptr_start, ptr_end)
void final_register(java_object_t *o, methodinfo *finalizer)
JNIEnv jthread jobject jclass jlong size
void vm_abort(const char *text,...)
void * heap_alloc(u4 size, u4 references, methodinfo *finalizer, bool collect)
void heap_println_usage()
#define FOREACH_OBJECT_REF(o, ref, refptr, code)
void * heap_alloc_uncollectable(u4 size)
regioninfo_t * heap_region_main
#define GC_ASSERT(assertion)
s4 get_object_size(java_object_t *o)
classinfo * class_java_lang_Class
#define GC_SET_FLAGS(obj, flags)
#define GC_ALIGN(val, size)
regioninfo_t * heap_region_sys
#define GC_TEST_FLAGS(obj, flags)
void heap_print_object(java_object_t *o)
arraydescriptor * arraydesc
This file contains the real-time timing utilities.
void utf_display_printable_ascii(Utf8String u)
classinfo * class_java_lang_String
GNU Classpath java/lang/String.
#define MSET(ptr, byte, type, num)
#define FOREACH_ARRAY_REF(o, ref, refptr, code)
void heap_init_objectheader(java_object_t *o, u4 bytelength)
#define LOCK_MONITOR_ENTER(o)
void heap_update_references(rootset_t *rs, regioninfo_t *region, u4 offset)
void heap_print_object_flags(java_object_t *o)
#define GC_SET_SIZE(obj, size)
void heap_dump_region(regioninfo_t *region, bool marked_only)
u4 region_resize(regioninfo_t *region, u4 size)
void heap_increase_size(rootset_t *rs)
void exceptions_throw_outofmemoryerror(void)