< prev index next >
src/share/vm/prims/jvmtiTagMap.cpp
Print this page
*** 780,790 ****
// add a field
void add(int index, char type, int offset);
// returns the field count for the given class
! static int compute_field_count(instanceKlassHandle ikh);
public:
~ClassFieldMap();
// access
--- 780,790 ----
// add a field
void add(int index, char type, int offset);
// returns the field count for the given class
! static int compute_field_count(InstanceKlass* ik);
public:
~ClassFieldMap();
// access
*** 816,835 ****
// Returns a heap allocated ClassFieldMap to describe the static fields
// of the given class.
//
ClassFieldMap* ClassFieldMap::create_map_of_static_fields(Klass* k) {
HandleMark hm;
! instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), k);
// create the field map
ClassFieldMap* field_map = new ClassFieldMap();
! FilteredFieldStream f(ikh, false, false);
int max_field_index = f.field_count()-1;
int index = 0;
! for (FilteredFieldStream fld(ikh, true, true); !fld.eos(); fld.next(), index++) {
// ignore instance fields
if (!fld.access_flags().is_static()) {
continue;
}
field_map->add(max_field_index - index, fld.signature()->byte_at(0), fld.offset());
--- 816,835 ----
// Returns a heap allocated ClassFieldMap to describe the static fields
// of the given class.
//
ClassFieldMap* ClassFieldMap::create_map_of_static_fields(Klass* k) {
HandleMark hm;
! InstanceKlass* ik = InstanceKlass::cast(k);
// create the field map
ClassFieldMap* field_map = new ClassFieldMap();
! FilteredFieldStream f(ik, false, false);
int max_field_index = f.field_count()-1;
int index = 0;
! for (FilteredFieldStream fld(ik, true, true); !fld.eos(); fld.next(), index++) {
// ignore instance fields
if (!fld.access_flags().is_static()) {
continue;
}
field_map->add(max_field_index - index, fld.signature()->byte_at(0), fld.offset());
*** 841,861 ****
// of the given class. All instance fields are included (this means public
// and private fields declared in superclasses and superinterfaces too).
//
ClassFieldMap* ClassFieldMap::create_map_of_instance_fields(oop obj) {
HandleMark hm;
! instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), obj->klass());
// create the field map
ClassFieldMap* field_map = new ClassFieldMap();
! FilteredFieldStream f(ikh, false, false);
int max_field_index = f.field_count()-1;
int index = 0;
! for (FilteredFieldStream fld(ikh, false, false); !fld.eos(); fld.next(), index++) {
// ignore static fields
if (fld.access_flags().is_static()) {
continue;
}
field_map->add(max_field_index - index, fld.signature()->byte_at(0), fld.offset());
--- 841,861 ----
// of the given class. All instance fields are included (this means public
// and private fields declared in superclasses and superinterfaces too).
//
ClassFieldMap* ClassFieldMap::create_map_of_instance_fields(oop obj) {
HandleMark hm;
! InstanceKlass* ik = InstanceKlass::cast(obj->klass());
// create the field map
ClassFieldMap* field_map = new ClassFieldMap();
! FilteredFieldStream f(ik, false, false);
int max_field_index = f.field_count()-1;
int index = 0;
! for (FilteredFieldStream fld(ik, false, false); !fld.eos(); fld.next(), index++) {
// ignore static fields
if (fld.access_flags().is_static()) {
continue;
}
field_map->add(max_field_index - index, fld.signature()->byte_at(0), fld.offset());
*** 1005,1017 ****
}
return false;
}
// helper function to indicate if an object is filtered by a klass filter
! static inline bool is_filtered_by_klass_filter(oop obj, KlassHandle klass_filter) {
! if (!klass_filter.is_null()) {
! if (obj->klass() != klass_filter()) {
return true;
}
}
return false;
}
--- 1005,1017 ----
}
return false;
}
// helper function to indicate if an object is filtered by a klass filter
! static inline bool is_filtered_by_klass_filter(oop obj, Klass* klass_filter) {
! if (klass_filter != NULL) {
! if (obj->klass() != klass_filter) {
return true;
}
}
return false;
}
*** 1269,1298 ****
// An ObjectClosure used to support the deprecated IterateOverHeap and
// IterateOverInstancesOfClass functions
class IterateOverHeapObjectClosure: public ObjectClosure {
private:
JvmtiTagMap* _tag_map;
! KlassHandle _klass;
jvmtiHeapObjectFilter _object_filter;
jvmtiHeapObjectCallback _heap_object_callback;
const void* _user_data;
// accessors
JvmtiTagMap* tag_map() const { return _tag_map; }
jvmtiHeapObjectFilter object_filter() const { return _object_filter; }
jvmtiHeapObjectCallback object_callback() const { return _heap_object_callback; }
! KlassHandle klass() const { return _klass; }
const void* user_data() const { return _user_data; }
// indicates if iteration has been aborted
bool _iteration_aborted;
bool is_iteration_aborted() const { return _iteration_aborted; }
void set_iteration_aborted(bool aborted) { _iteration_aborted = aborted; }
public:
IterateOverHeapObjectClosure(JvmtiTagMap* tag_map,
! KlassHandle klass,
jvmtiHeapObjectFilter object_filter,
jvmtiHeapObjectCallback heap_object_callback,
const void* user_data) :
_tag_map(tag_map),
_klass(klass),
--- 1269,1298 ----
// An ObjectClosure used to support the deprecated IterateOverHeap and
// IterateOverInstancesOfClass functions
class IterateOverHeapObjectClosure: public ObjectClosure {
private:
JvmtiTagMap* _tag_map;
! Klass* _klass;
jvmtiHeapObjectFilter _object_filter;
jvmtiHeapObjectCallback _heap_object_callback;
const void* _user_data;
// accessors
JvmtiTagMap* tag_map() const { return _tag_map; }
jvmtiHeapObjectFilter object_filter() const { return _object_filter; }
jvmtiHeapObjectCallback object_callback() const { return _heap_object_callback; }
! Klass* klass() const { return _klass; }
const void* user_data() const { return _user_data; }
// indicates if iteration has been aborted
bool _iteration_aborted;
bool is_iteration_aborted() const { return _iteration_aborted; }
void set_iteration_aborted(bool aborted) { _iteration_aborted = aborted; }
public:
IterateOverHeapObjectClosure(JvmtiTagMap* tag_map,
! Klass* klass,
jvmtiHeapObjectFilter object_filter,
jvmtiHeapObjectCallback heap_object_callback,
const void* user_data) :
_tag_map(tag_map),
_klass(klass),
*** 1313,1323 ****
// ignore any objects that aren't visible to profiler
if (!ServiceUtil::visible_oop(o)) return;
// instanceof check when filtering by klass
! if (!klass().is_null() && !o->is_a(klass()())) {
return;
}
// prepare for the calllback
CallbackWrapper wrapper(tag_map(), o);
--- 1313,1323 ----
// ignore any objects that aren't visible to profiler
if (!ServiceUtil::visible_oop(o)) return;
// instanceof check when filtering by klass
! if (klass() != NULL && !o->is_a(klass())) {
return;
}
// prepare for the calllback
CallbackWrapper wrapper(tag_map(), o);
*** 1342,1361 ****
// An ObjectClosure used to support the IterateThroughHeap function
class IterateThroughHeapObjectClosure: public ObjectClosure {
private:
JvmtiTagMap* _tag_map;
! KlassHandle _klass;
int _heap_filter;
const jvmtiHeapCallbacks* _callbacks;
const void* _user_data;
// accessor functions
JvmtiTagMap* tag_map() const { return _tag_map; }
int heap_filter() const { return _heap_filter; }
const jvmtiHeapCallbacks* callbacks() const { return _callbacks; }
! KlassHandle klass() const { return _klass; }
const void* user_data() const { return _user_data; }
// indicates if the iteration has been aborted
bool _iteration_aborted;
bool is_iteration_aborted() const { return _iteration_aborted; }
--- 1342,1361 ----
// An ObjectClosure used to support the IterateThroughHeap function
class IterateThroughHeapObjectClosure: public ObjectClosure {
private:
JvmtiTagMap* _tag_map;
! Klass* _klass;
int _heap_filter;
const jvmtiHeapCallbacks* _callbacks;
const void* _user_data;
// accessor functions
JvmtiTagMap* tag_map() const { return _tag_map; }
int heap_filter() const { return _heap_filter; }
const jvmtiHeapCallbacks* callbacks() const { return _callbacks; }
! Klass* klass() const { return _klass; }
const void* user_data() const { return _user_data; }
// indicates if the iteration has been aborted
bool _iteration_aborted;
bool is_iteration_aborted() const { return _iteration_aborted; }
*** 1371,1381 ****
return is_abort;
}
public:
IterateThroughHeapObjectClosure(JvmtiTagMap* tag_map,
! KlassHandle klass,
int heap_filter,
const jvmtiHeapCallbacks* heap_callbacks,
const void* user_data) :
_tag_map(tag_map),
_klass(klass),
--- 1371,1381 ----
return is_abort;
}
public:
IterateThroughHeapObjectClosure(JvmtiTagMap* tag_map,
! Klass* klass,
int heap_filter,
const jvmtiHeapCallbacks* heap_callbacks,
const void* user_data) :
_tag_map(tag_map),
_klass(klass),
*** 1467,1477 ****
};
// Deprecated function to iterate over all objects in the heap
void JvmtiTagMap::iterate_over_heap(jvmtiHeapObjectFilter object_filter,
! KlassHandle klass,
jvmtiHeapObjectCallback heap_object_callback,
const void* user_data)
{
MutexLocker ml(Heap_lock);
IterateOverHeapObjectClosure blk(this,
--- 1467,1477 ----
};
// Deprecated function to iterate over all objects in the heap
void JvmtiTagMap::iterate_over_heap(jvmtiHeapObjectFilter object_filter,
! Klass* klass,
jvmtiHeapObjectCallback heap_object_callback,
const void* user_data)
{
MutexLocker ml(Heap_lock);
IterateOverHeapObjectClosure blk(this,
*** 1484,1494 ****
}
// Iterates over all objects in the heap
void JvmtiTagMap::iterate_through_heap(jint heap_filter,
! KlassHandle klass,
const jvmtiHeapCallbacks* callbacks,
const void* user_data)
{
MutexLocker ml(Heap_lock);
IterateThroughHeapObjectClosure blk(this,
--- 1484,1494 ----
}
// Iterates over all objects in the heap
void JvmtiTagMap::iterate_through_heap(jint heap_filter,
! Klass* klass,
const jvmtiHeapCallbacks* callbacks,
const void* user_data)
{
MutexLocker ml(Heap_lock);
IterateThroughHeapObjectClosure blk(this,
*** 1795,1822 ****
// The advanced heap walk context for the FollowReferences functions.
// The context is the callbacks, and the fields used for filtering.
class AdvancedHeapWalkContext: public HeapWalkContext {
private:
jint _heap_filter;
! KlassHandle _klass_filter;
const jvmtiHeapCallbacks* _heap_callbacks;
public:
AdvancedHeapWalkContext() : HeapWalkContext(false) { }
AdvancedHeapWalkContext(jint heap_filter,
! KlassHandle klass_filter,
const jvmtiHeapCallbacks* heap_callbacks) :
HeapWalkContext(true),
_heap_filter(heap_filter),
_klass_filter(klass_filter),
_heap_callbacks(heap_callbacks) {
}
// accessors
jint heap_filter() const { return _heap_filter; }
! KlassHandle klass_filter() const { return _klass_filter; }
const jvmtiHeapReferenceCallback heap_reference_callback() const {
return _heap_callbacks->heap_reference_callback;
};
const jvmtiPrimitiveFieldCallback primitive_field_callback() const {
--- 1795,1822 ----
// The advanced heap walk context for the FollowReferences functions.
// The context is the callbacks, and the fields used for filtering.
class AdvancedHeapWalkContext: public HeapWalkContext {
private:
jint _heap_filter;
! Klass* _klass_filter;
const jvmtiHeapCallbacks* _heap_callbacks;
public:
AdvancedHeapWalkContext() : HeapWalkContext(false) { }
AdvancedHeapWalkContext(jint heap_filter,
! Klass* klass_filter,
const jvmtiHeapCallbacks* heap_callbacks) :
HeapWalkContext(true),
_heap_filter(heap_filter),
_klass_filter(klass_filter),
_heap_callbacks(heap_callbacks) {
}
// accessors
jint heap_filter() const { return _heap_filter; }
! Klass* klass_filter() const { return _klass_filter; }
const jvmtiHeapReferenceCallback heap_reference_callback() const {
return _heap_callbacks->heap_reference_callback;
};
const jvmtiPrimitiveFieldCallback primitive_field_callback() const {
*** 3285,3295 ****
VMThread::execute(&op);
}
// follow references from an initial object or the GC roots
void JvmtiTagMap::follow_references(jint heap_filter,
! KlassHandle klass,
jobject object,
const jvmtiHeapCallbacks* callbacks,
const void* user_data)
{
oop obj = JNIHandles::resolve(object);
--- 3285,3295 ----
VMThread::execute(&op);
}
// follow references from an initial object or the GC roots
void JvmtiTagMap::follow_references(jint heap_filter,
! Klass* klass,
jobject object,
const jvmtiHeapCallbacks* callbacks,
const void* user_data)
{
oop obj = JNIHandles::resolve(object);
< prev index next >