OSDN Git Service

Remove as sg.exe is not a open source product.
[nxt-jsp/etrobo-atk.git] / nxtOSEK / lejos_nxj / src / nxtvm / javavm / gc.c
1 /**
2  * gc.c
3  * Garbage collection routines
4  */
5  
6 #include "trace.h"
7 #include "classes.h"
8 #include "language.h"
9
10 byte gCurrentMark = 0;
11
12
13
14 void mark_and_sweep()
15 {
16
17 $TBD
18         
19 }
20
21 void mark (Object *obj)
22 {
23   if (obj == JNULL)
24     return;
25
26   #ifdef VERIFY_GC
27   assert (is_allocated (obj), GC0);
28   #endif
29
30   if (is_gc_marked (obj))
31     return;
32   set_gc_marked (obj);
33   if (is_array (obj))
34   {
35     if (get_element_type (obj) == T_REFERENCE)
36     {
37       unsigned short i;
38       unsigned short length = get_array_length (obj);
39       REFERENCE *refarr = ref_array (obj);
40       
41       for (i = 0; i < length; i++)
42         mark (refarr[i]);
43     }
44   }
45   else
46   {
47     ClassRecord *classRecord;
48     byte classIndex;
49     
50     classIndex = get_na_class_index (obj);
51     for (;;)
52     {
53       classRecord = get_class_record (classIndex);
54       // Mark fields of type REFERENCE.
55       mark_reference_fields (obj, classRecord);
56       if (classIndex == JAVA_LANG_OBJECT)
57         break;
58       classIndex = classRecord -> parentClass;
59     } 
60   }
61 }