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/_klassKlass.cpp.incl"
00026
00027 void set_klassKlass_vtbl(Klass* k) {
00028 klassKlass o;
00029 k->set_vtbl_value(o.vtbl_value());
00030 }
00031
00032 oop klassKlass::allocateObject() {
00033
00034 memOop obj = as_memOop(Universe::allocate_tenured(non_indexable_size()));
00035
00036 obj->initialize_header(has_untagged_contents(), as_klassOop());
00037 obj->initialize_body(klassOopDesc::header_size(), non_indexable_size());
00038 return obj;
00039 }
00040
00041 klassOop klassKlass::create_subclass(mixinOop mixin, Format format) {
00042 return NULL;
00043 }
00044
00045 int klassKlass::oop_scavenge_contents(oop obj) {
00046 int size = non_indexable_size();
00047
00048 memOop(obj)->scavenge_header();
00049 Klass* k = klassOop(obj)->klass_part();
00050 scavenge_oop((oop*) &k->_non_indexable_size);
00051 scavenge_oop((oop*) &k->_has_untagged_contents);
00052 scavenge_oop((oop*) &k->_classVars);
00053 scavenge_oop((oop*) &k->_methods);
00054 scavenge_oop((oop*) &k->_superKlass);
00055 scavenge_oop((oop*) &k->_mixin);
00056
00057 memOop(obj)->scavenge_body(klassOopDesc::header_size(), size);
00058 return size;
00059 }
00060
00061 int klassKlass::oop_scavenge_tenured_contents(oop obj) {
00062 int size = non_indexable_size();
00063
00064 memOop(obj)->scavenge_tenured_header();
00065 Klass* k = klassOop(obj)->klass_part();
00066 scavenge_tenured_oop((oop*) &k->_non_indexable_size);
00067 scavenge_tenured_oop((oop*) &k->_has_untagged_contents);
00068 scavenge_tenured_oop((oop*) &k->_classVars);
00069 scavenge_tenured_oop((oop*) &k->_methods);
00070 scavenge_tenured_oop((oop*) &k->_superKlass);
00071 scavenge_tenured_oop((oop*) &k->_mixin);
00072
00073 memOop(obj)->scavenge_tenured_body(klassOopDesc::header_size(), size);
00074 return size;
00075 }
00076
00077 void klassKlass::oop_follow_contents(oop obj) {
00078
00079 memOop(obj)->follow_header();
00080 Klass* k = klassOop(obj)->klass_part();
00081 MarkSweep::reverse_and_push((oop*) &k->_non_indexable_size);
00082 MarkSweep::reverse_and_push((oop*) &k->_has_untagged_contents);
00083 MarkSweep::reverse_and_push((oop*) &k->_classVars);
00084 MarkSweep::reverse_and_push((oop*) &k->_methods);
00085 MarkSweep::reverse_and_push((oop*) &k->_superKlass);
00086 MarkSweep::reverse_and_push((oop*) &k->_mixin);
00087
00088 memOop(obj)->follow_body(klassOopDesc::header_size(), non_indexable_size());
00089 }
00090
00091 bool klassKlass::oop_verify(oop obj) {
00092 assert(obj->is_klass(), "must be class");
00093 Klass* k = klassOop(obj)->klass_part();
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 bool flag = memOop(obj)->verify();
00105 return flag;
00106 }
00107
00108 void klassKlass::oop_print_on(oop obj, outputStream* st) {
00109 memOopKlass::oop_print_on(obj, st);
00110 }
00111
00112 void klassKlass::oop_print_value_on(oop obj, outputStream* st) {
00113 if (PrintObjectID) {
00114 memOop(obj)->print_id_on(st);
00115 st->print("-");
00116 }
00117 klassOop(obj)->klass_part()->print_name_on(st);
00118 st->print(" class");
00119 }
00120
00121 void klassKlass::oop_layout_iterate(oop obj, ObjectLayoutClosure* blk) {
00122
00123 memOop(obj)->layout_iterate_header(blk);
00124 Klass* k = klassOop(obj)->klass_part();
00125 blk->do_oop("size", (oop*) &k->_non_indexable_size);
00126 blk->do_oop("untag", (oop*) &k->_has_untagged_contents);
00127 blk->do_oop("classVars", (oop*) &k->_classVars);
00128 blk->do_oop("methods", (oop*) &k->_methods);
00129 blk->do_oop("super", (oop*) &k->_superKlass);
00130 blk->do_oop("mixin", (oop*) &k->_mixin);
00131
00132 memOop(obj)->layout_iterate_body(blk, klassOopDesc::header_size(), non_indexable_size());
00133 }
00134
00135 void klassKlass::oop_oop_iterate(oop obj, OopClosure* blk) {
00136
00137 memOop(obj)->oop_iterate_header(blk);
00138 Klass* k = klassOop(obj)->klass_part();
00139 blk->do_oop((oop*) &k->_non_indexable_size);
00140 blk->do_oop((oop*) &k->_has_untagged_contents);
00141 blk->do_oop((oop*) &k->_classVars);
00142 blk->do_oop((oop*) &k->_methods);
00143 blk->do_oop((oop*) &k->_superKlass);
00144 blk->do_oop((oop*) &k->_mixin);
00145
00146 memOop(obj)->oop_iterate_body(blk, klassOopDesc::header_size(), non_indexable_size());
00147 }
00148
00149 oop klassKlass::oop_primitive_allocate(oop obj) {
00150 return klassOop(obj)->klass_part()->allocateObject();
00151 }
00152
00153 oop klassKlass::oop_primitive_allocate_size(oop obj, int size) {
00154 return klassOop(obj)->klass_part()->allocateObjectSize(size);
00155 }
00156
00157 oop klassKlass::oop_shallow_copy(oop obj, bool tenured) {
00158 return markSymbol(vmSymbols::not_clonable());
00159 }