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/_proxyKlass.cpp.incl"
00026
00027 void set_proxyKlass_vtbl(Klass* k) {
00028 proxyKlass o;
00029 k->set_vtbl_value(o.vtbl_value());
00030 }
00031
00032 oop proxyKlass::allocateObject() {
00033 klassOop k = as_klassOop();
00034 int size = non_indexable_size();
00035
00036 proxyOop obj = as_proxyOop(Universe::allocate(size, (memOop*)&k));
00037
00038 memOop(obj)->initialize_header(true, k);
00039 obj->set_pointer(NULL);
00040
00041 memOop(obj)->initialize_body(proxyOopDesc::header_size(), size);
00042 return obj;
00043 }
00044
00045 klassOop proxyKlass::create_subclass(mixinOop mixin, Format format) {
00046 if (format == mem_klass || format == proxy_klass) {
00047 return proxyKlass::create_class(as_klassOop(), mixin);
00048 }
00049 return NULL;
00050 }
00051
00052 klassOop proxyKlass::create_class(klassOop super_class, mixinOop mixin) {
00053 proxyKlass o;
00054 return create_generic_class(super_class, mixin, o.vtbl_value());
00055 }
00056
00057 int proxyKlass::oop_scavenge_contents(oop obj) {
00058 int size = non_indexable_size();
00059
00060 memOop(obj)->scavenge_header();
00061
00062 memOop(obj)->scavenge_body(proxyOopDesc::header_size(), size);
00063 return size;
00064 }
00065
00066 int proxyKlass::oop_scavenge_tenured_contents(oop obj) {
00067 int size = non_indexable_size();
00068
00069 memOop(obj)->scavenge_tenured_header();
00070
00071 memOop(obj)->scavenge_tenured_body(proxyOopDesc::header_size(), size);
00072 return size;
00073 }
00074
00075 void proxyKlass::oop_follow_contents(oop obj) {
00076
00077 memOop(obj)->follow_header();
00078
00079 memOop(obj)->follow_body(proxyOopDesc::header_size(), non_indexable_size());
00080 }
00081
00082 void proxyKlass::oop_layout_iterate(oop obj, ObjectLayoutClosure* blk) {
00083
00084 memOop(obj)->layout_iterate_header(blk);
00085 blk->do_long("pointer", &proxyOop(obj)->addr()->_pointer);
00086
00087 memOop(obj)->layout_iterate_body(blk, proxyOopDesc::header_size(), non_indexable_size());
00088 }
00089
00090 void proxyKlass::oop_oop_iterate(oop obj, OopClosure* blk) {
00091
00092 memOop(obj)->oop_iterate_header(blk);
00093
00094 memOop(obj)->oop_iterate_body(blk, proxyOopDesc::header_size(), non_indexable_size());
00095 }