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 }