< prev index next >

src/hotspot/share/prims/jvmtiEnvBase.hpp

Print this page

341   bool is_enabled(jvmtiEvent event_type) {
342     return _env_event_enable.is_enabled(event_type);
343   }
344 
345 // Random Utilities
346 
347  protected:
348   // helper methods for creating arrays of global JNI Handles from local Handles
349   // allocated into environment specific storage
350   jthread * new_jthreadArray(int length, Handle *handles);
351   jthreadGroup * new_jthreadGroupArray(int length, objArrayHandle groups);
352 
353   // convert to a jni jclass from a non-null Klass*
354   jclass get_jni_class_non_null(Klass* k);
355 
356   jint count_locked_objects(JavaThread *java_thread, Handle hobj);
357   jvmtiError get_locked_objects_in_frame(JavaThread *calling_thread,
358                                    JavaThread* java_thread,
359                                    javaVFrame *jvf,
360                                    GrowableArray<jvmtiMonitorStackDepthInfo*>* owned_monitors_list,
361                                    jint depth);
362  public:
363   static javaVFrame* jvf_for_thread_and_depth(JavaThread* java_thread, jint depth);
364 
365   // get a field descriptor for the specified class and field
366   static bool get_field_descriptor(Klass* k, jfieldID field, fieldDescriptor* fd);
367 
368   // check and skip frames hidden in mount/unmount transitions
369   static javaVFrame* check_and_skip_hidden_frames(bool is_in_VTMS_transition, javaVFrame* jvf);
370   static javaVFrame* check_and_skip_hidden_frames(JavaThread* jt, javaVFrame* jvf);
371   static javaVFrame* check_and_skip_hidden_frames(oop vthread, javaVFrame* jvf);
372 
373   // check if virtual thread is not terminated (alive)
374   static bool is_vthread_alive(oop vt);
375 
376   // return JavaThread if virtual thread is mounted, null otherwise
377   static JavaThread* get_JavaThread_or_null(oop vthread);
378 
379   // get virtual thread last java vframe
380   static javaVFrame* get_vthread_jvf(oop vthread);
381 

405   jvmtiError get_frame_count(oop frame_oop, jint *count_ptr);
406   jvmtiError get_frame_location(javaVFrame* jvf, jint depth,
407                                 jmethodID* method_ptr, jlocation* location_ptr);
408   jvmtiError get_frame_location(JavaThread* java_thread, jint depth,
409                                 jmethodID* method_ptr, jlocation* location_ptr);
410   jvmtiError get_frame_location(oop vthread_oop, jint depth,
411                                 jmethodID* method_ptr, jlocation* location_ptr);
412   jvmtiError set_frame_pop(JvmtiThreadState* state, javaVFrame* jvf, jint depth);
413   jvmtiError get_object_monitor_usage(JavaThread* calling_thread,
414                                       jobject object, jvmtiMonitorUsage* info_ptr);
415   jvmtiError get_stack_trace(javaVFrame* jvf,
416                              jint stack_depth, jint max_count,
417                              jvmtiFrameInfo* frame_buffer, jint* count_ptr);
418   jvmtiError get_stack_trace(JavaThread* java_thread,
419                              jint stack_depth, jint max_count,
420                              jvmtiFrameInfo* frame_buffer, jint* count_ptr);
421   jvmtiError get_current_contended_monitor(JavaThread* calling_thread, JavaThread* java_thread,
422                                            jobject* monitor_ptr, bool is_virtual);
423   jvmtiError get_owned_monitors(JavaThread* calling_thread, JavaThread* java_thread,
424                                 GrowableArray<jvmtiMonitorStackDepthInfo*> *owned_monitors_list);
425   jvmtiError get_owned_monitors(JavaThread* calling_thread, JavaThread* java_thread, javaVFrame* jvf,
426                                 GrowableArray<jvmtiMonitorStackDepthInfo*> *owned_monitors_list);
427   static jvmtiError check_top_frame(Thread* current_thread, JavaThread* java_thread,
428                                     jvalue value, TosState tos, Handle* ret_ob_h);
429   jvmtiError force_early_return(jthread thread, jvalue value, TosState tos);
430 };
431 
432 // This class is the only safe means of iterating through environments.
433 // Note that this iteratation includes invalid environments pending
434 // deallocation -- in fact, some uses depend on this behavior.
435 
436 class JvmtiEnvIterator : public StackObj {
437  private:
438   bool _entry_was_marked;
439  public:
440   JvmtiEnvIterator() {
441     if (Threads::number_of_threads() == 0) {
442       _entry_was_marked = false; // we are single-threaded, no need
443     } else {
444       Thread::current()->entering_jvmti_env_iteration();
445       _entry_was_marked = true;
446     }

341   bool is_enabled(jvmtiEvent event_type) {
342     return _env_event_enable.is_enabled(event_type);
343   }
344 
345 // Random Utilities
346 
347  protected:
348   // helper methods for creating arrays of global JNI Handles from local Handles
349   // allocated into environment specific storage
350   jthread * new_jthreadArray(int length, Handle *handles);
351   jthreadGroup * new_jthreadGroupArray(int length, objArrayHandle groups);
352 
353   // convert to a jni jclass from a non-null Klass*
354   jclass get_jni_class_non_null(Klass* k);
355 
356   jint count_locked_objects(JavaThread *java_thread, Handle hobj);
357   jvmtiError get_locked_objects_in_frame(JavaThread *calling_thread,
358                                    JavaThread* java_thread,
359                                    javaVFrame *jvf,
360                                    GrowableArray<jvmtiMonitorStackDepthInfo*>* owned_monitors_list,
361                                    jint depth, oop vthread = nullptr);
362  public:
363   static javaVFrame* jvf_for_thread_and_depth(JavaThread* java_thread, jint depth);
364 
365   // get a field descriptor for the specified class and field
366   static bool get_field_descriptor(Klass* k, jfieldID field, fieldDescriptor* fd);
367 
368   // check and skip frames hidden in mount/unmount transitions
369   static javaVFrame* check_and_skip_hidden_frames(bool is_in_VTMS_transition, javaVFrame* jvf);
370   static javaVFrame* check_and_skip_hidden_frames(JavaThread* jt, javaVFrame* jvf);
371   static javaVFrame* check_and_skip_hidden_frames(oop vthread, javaVFrame* jvf);
372 
373   // check if virtual thread is not terminated (alive)
374   static bool is_vthread_alive(oop vt);
375 
376   // return JavaThread if virtual thread is mounted, null otherwise
377   static JavaThread* get_JavaThread_or_null(oop vthread);
378 
379   // get virtual thread last java vframe
380   static javaVFrame* get_vthread_jvf(oop vthread);
381 

405   jvmtiError get_frame_count(oop frame_oop, jint *count_ptr);
406   jvmtiError get_frame_location(javaVFrame* jvf, jint depth,
407                                 jmethodID* method_ptr, jlocation* location_ptr);
408   jvmtiError get_frame_location(JavaThread* java_thread, jint depth,
409                                 jmethodID* method_ptr, jlocation* location_ptr);
410   jvmtiError get_frame_location(oop vthread_oop, jint depth,
411                                 jmethodID* method_ptr, jlocation* location_ptr);
412   jvmtiError set_frame_pop(JvmtiThreadState* state, javaVFrame* jvf, jint depth);
413   jvmtiError get_object_monitor_usage(JavaThread* calling_thread,
414                                       jobject object, jvmtiMonitorUsage* info_ptr);
415   jvmtiError get_stack_trace(javaVFrame* jvf,
416                              jint stack_depth, jint max_count,
417                              jvmtiFrameInfo* frame_buffer, jint* count_ptr);
418   jvmtiError get_stack_trace(JavaThread* java_thread,
419                              jint stack_depth, jint max_count,
420                              jvmtiFrameInfo* frame_buffer, jint* count_ptr);
421   jvmtiError get_current_contended_monitor(JavaThread* calling_thread, JavaThread* java_thread,
422                                            jobject* monitor_ptr, bool is_virtual);
423   jvmtiError get_owned_monitors(JavaThread* calling_thread, JavaThread* java_thread,
424                                 GrowableArray<jvmtiMonitorStackDepthInfo*> *owned_monitors_list);
425   jvmtiError get_owned_monitors(JavaThread* calling_thread, JavaThread* carrier, javaVFrame* jvf,
426                                 GrowableArray<jvmtiMonitorStackDepthInfo*> *owned_monitors_list, oop vthread);
427   static jvmtiError check_top_frame(Thread* current_thread, JavaThread* java_thread,
428                                     jvalue value, TosState tos, Handle* ret_ob_h);
429   jvmtiError force_early_return(jthread thread, jvalue value, TosState tos);
430 };
431 
432 // This class is the only safe means of iterating through environments.
433 // Note that this iteratation includes invalid environments pending
434 // deallocation -- in fact, some uses depend on this behavior.
435 
436 class JvmtiEnvIterator : public StackObj {
437  private:
438   bool _entry_was_marked;
439  public:
440   JvmtiEnvIterator() {
441     if (Threads::number_of_threads() == 0) {
442       _entry_was_marked = false; // we are single-threaded, no need
443     } else {
444       Thread::current()->entering_jvmti_env_iteration();
445       _entry_was_marked = true;
446     }
< prev index next >