00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 # include "incls/_precompiled.incl"
00025 # include "incls/_processKlass.cpp.incl"
00026 
00027 void set_processKlass_vtbl(Klass* k) {
00028   processKlass o;
00029   k->set_vtbl_value(o.vtbl_value());
00030 }
00031 
00032 oop processKlass::allocateProcess(int stack_size) {
00033   return allocateObject();
00034 }
00035 
00036 oop processKlass::allocateObject() {
00037   klassOop k    = as_klassOop();
00038   int      size = non_indexable_size();
00039   
00040   processOop obj = as_processOop(Universe::allocate(size, (memOop*)&k));
00041   
00042   memOop(obj)->initialize_header(true, k);
00043   obj->set_process(NULL);
00044   
00045   memOop(obj)->initialize_body(processOopDesc::header_size(), size);
00046   return obj;
00047 }
00048 
00049 klassOop processKlass::create_subclass(mixinOop mixin, Format format) {
00050   if (format == mem_klass || format == process_klass) {
00051     return processKlass::create_class(as_klassOop(), mixin);
00052   }
00053   return NULL;
00054 }
00055 
00056 klassOop processKlass::create_class(klassOop super_class, mixinOop mixin) {
00057   processKlass o;
00058   return create_generic_class(super_class, mixin, o.vtbl_value());
00059 }
00060 
00061 int processKlass::oop_scavenge_contents(oop obj) {
00062   int size = non_indexable_size();
00063   
00064   memOop(obj)->scavenge_header();
00065   
00066   memOop(obj)->scavenge_body(processOopDesc::header_size(), size);
00067   return size;  
00068 }
00069 
00070 int processKlass::oop_scavenge_tenured_contents(oop obj) {
00071   int size = non_indexable_size();
00072   
00073   memOop(obj)->scavenge_tenured_header();
00074   
00075   memOop(obj)->scavenge_tenured_body(processOopDesc::header_size(), size);
00076   return size;
00077 }
00078 
00079 void processKlass::oop_follow_contents(oop obj) {
00080   
00081   memOop(obj)->follow_header();
00082   
00083   memOop(obj)->follow_body(processOopDesc::header_size(), non_indexable_size());
00084 }
00085 
00086 void processKlass::oop_layout_iterate(oop obj, ObjectLayoutClosure* blk) {
00087   
00088   memOop(obj)->layout_iterate_header(blk);
00089   blk->do_long("process", (void**) &processOop(obj)->addr()->_process);
00090   
00091   memOop(obj)->layout_iterate_body(blk, processOopDesc::header_size(), non_indexable_size());
00092 }
00093 
00094 void processKlass::oop_oop_iterate(oop obj, OopClosure* blk) {
00095   
00096   memOop(obj)->oop_iterate_header(blk);
00097   
00098   memOop(obj)->oop_iterate_body(blk, processOopDesc::header_size(), non_indexable_size());
00099 }