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