< prev index next >

src/hotspot/share/prims/jvm.cpp

Print this page




  52 #include "prims/jvmtiThreadState.hpp"
  53 #include "prims/nativeLookup.hpp"
  54 #include "prims/privilegedStack.hpp"
  55 #include "prims/stackwalk.hpp"
  56 #include "runtime/arguments.hpp"
  57 #include "runtime/atomic.hpp"
  58 #include "runtime/handles.inline.hpp"
  59 #include "runtime/init.hpp"
  60 #include "runtime/interfaceSupport.hpp"
  61 #include "runtime/java.hpp"
  62 #include "runtime/javaCalls.hpp"
  63 #include "runtime/jfieldIDWorkaround.hpp"
  64 #include "runtime/orderAccess.inline.hpp"
  65 #include "runtime/os.inline.hpp"
  66 #include "runtime/perfData.hpp"
  67 #include "runtime/reflection.hpp"
  68 #include "runtime/thread.inline.hpp"
  69 #include "runtime/vframe.hpp"
  70 #include "runtime/vm_operations.hpp"
  71 #include "runtime/vm_version.hpp"

  72 #include "services/attachListener.hpp"
  73 #include "services/management.hpp"
  74 #include "services/threadService.hpp"
  75 #include "trace/tracing.hpp"
  76 #include "utilities/copy.hpp"
  77 #include "utilities/defaultStream.hpp"
  78 #include "utilities/dtrace.hpp"
  79 #include "utilities/events.hpp"
  80 #include "utilities/histogram.hpp"
  81 #include "utilities/macros.hpp"
  82 #include "utilities/utf8.hpp"
  83 #if INCLUDE_CDS
  84 #include "classfile/sharedClassUtil.hpp"
  85 #include "classfile/systemDictionaryShared.hpp"
  86 #endif
  87 
  88 #include <errno.h>
  89 
  90 /*
  91   NOTE about use of any ctor or function call that can trigger a safepoint/GC:


 560                                   jobjectArray frames))
 561   JVMWrapper("JVM_MoreStackWalk");
 562   JavaThread* jt = (JavaThread*) THREAD;
 563 
 564   // frames array is a Class<?>[] array when only getting caller reference,
 565   // and a StackFrameInfo[] array (or derivative) otherwise. It should never
 566   // be null.
 567   objArrayOop fa = objArrayOop(JNIHandles::resolve_non_null(frames));
 568   objArrayHandle frames_array_h(THREAD, fa);
 569 
 570   int limit = start_index+frame_count;
 571   if (frames_array_h->length() < limit) {
 572     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "not enough space in buffers");
 573   }
 574 
 575   Handle stackStream_h(THREAD, JNIHandles::resolve_non_null(stackStream));
 576   return StackWalk::fetchNextBatch(stackStream_h, mode, anchor, frame_count,
 577                                    start_index, frames_array_h, THREAD);
 578 JVM_END
 579 






 580 // java.lang.Object ///////////////////////////////////////////////
 581 
 582 
 583 JVM_ENTRY(jint, JVM_IHashCode(JNIEnv* env, jobject handle))
 584   JVMWrapper("JVM_IHashCode");
 585   // as implemented in the classic virtual machine; return 0 if object is NULL
 586   return handle == NULL ? 0 : ObjectSynchronizer::FastHashCode (THREAD, JNIHandles::resolve_non_null(handle)) ;
 587 JVM_END
 588 
 589 
 590 JVM_ENTRY(void, JVM_MonitorWait(JNIEnv* env, jobject handle, jlong ms))
 591   JVMWrapper("JVM_MonitorWait");
 592   Handle obj(THREAD, JNIHandles::resolve_non_null(handle));
 593   JavaThreadInObjectWaitState jtiows(thread, ms != 0);
 594   if (JvmtiExport::should_post_monitor_wait()) {
 595     JvmtiExport::post_monitor_wait((JavaThread *)THREAD, (oop)obj(), ms);
 596 
 597     // The current thread already owns the monitor and it has not yet
 598     // been added to the wait queue so the current thread cannot be
 599     // made the successor. This means that the JVMTI_EVENT_MONITOR_WAIT




  52 #include "prims/jvmtiThreadState.hpp"
  53 #include "prims/nativeLookup.hpp"
  54 #include "prims/privilegedStack.hpp"
  55 #include "prims/stackwalk.hpp"
  56 #include "runtime/arguments.hpp"
  57 #include "runtime/atomic.hpp"
  58 #include "runtime/handles.inline.hpp"
  59 #include "runtime/init.hpp"
  60 #include "runtime/interfaceSupport.hpp"
  61 #include "runtime/java.hpp"
  62 #include "runtime/javaCalls.hpp"
  63 #include "runtime/jfieldIDWorkaround.hpp"
  64 #include "runtime/orderAccess.inline.hpp"
  65 #include "runtime/os.inline.hpp"
  66 #include "runtime/perfData.hpp"
  67 #include "runtime/reflection.hpp"
  68 #include "runtime/thread.inline.hpp"
  69 #include "runtime/vframe.hpp"
  70 #include "runtime/vm_operations.hpp"
  71 #include "runtime/vm_version.hpp"
  72 #include "runtime/continuation.hpp"
  73 #include "services/attachListener.hpp"
  74 #include "services/management.hpp"
  75 #include "services/threadService.hpp"
  76 #include "trace/tracing.hpp"
  77 #include "utilities/copy.hpp"
  78 #include "utilities/defaultStream.hpp"
  79 #include "utilities/dtrace.hpp"
  80 #include "utilities/events.hpp"
  81 #include "utilities/histogram.hpp"
  82 #include "utilities/macros.hpp"
  83 #include "utilities/utf8.hpp"
  84 #if INCLUDE_CDS
  85 #include "classfile/sharedClassUtil.hpp"
  86 #include "classfile/systemDictionaryShared.hpp"
  87 #endif
  88 
  89 #include <errno.h>
  90 
  91 /*
  92   NOTE about use of any ctor or function call that can trigger a safepoint/GC:


 561                                   jobjectArray frames))
 562   JVMWrapper("JVM_MoreStackWalk");
 563   JavaThread* jt = (JavaThread*) THREAD;
 564 
 565   // frames array is a Class<?>[] array when only getting caller reference,
 566   // and a StackFrameInfo[] array (or derivative) otherwise. It should never
 567   // be null.
 568   objArrayOop fa = objArrayOop(JNIHandles::resolve_non_null(frames));
 569   objArrayHandle frames_array_h(THREAD, fa);
 570 
 571   int limit = start_index+frame_count;
 572   if (frames_array_h->length() < limit) {
 573     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "not enough space in buffers");
 574   }
 575 
 576   Handle stackStream_h(THREAD, JNIHandles::resolve_non_null(stackStream));
 577   return StackWalk::fetchNextBatch(stackStream_h, mode, anchor, frame_count,
 578                                    start_index, frames_array_h, THREAD);
 579 JVM_END
 580 
 581 // java.lang.Continuation /////////////////////////////////////////
 582 
 583 JVM_ENTRY(void, JVM_RegisterContinuationMethods(JNIEnv *env, jclass cls))
 584   CONT_RegisterNativeMethods(env, cls);
 585 JVM_END
 586 
 587 // java.lang.Object ///////////////////////////////////////////////
 588 
 589 
 590 JVM_ENTRY(jint, JVM_IHashCode(JNIEnv* env, jobject handle))
 591   JVMWrapper("JVM_IHashCode");
 592   // as implemented in the classic virtual machine; return 0 if object is NULL
 593   return handle == NULL ? 0 : ObjectSynchronizer::FastHashCode (THREAD, JNIHandles::resolve_non_null(handle)) ;
 594 JVM_END
 595 
 596 
 597 JVM_ENTRY(void, JVM_MonitorWait(JNIEnv* env, jobject handle, jlong ms))
 598   JVMWrapper("JVM_MonitorWait");
 599   Handle obj(THREAD, JNIHandles::resolve_non_null(handle));
 600   JavaThreadInObjectWaitState jtiows(thread, ms != 0);
 601   if (JvmtiExport::should_post_monitor_wait()) {
 602     JvmtiExport::post_monitor_wait((JavaThread *)THREAD, (oop)obj(), ms);
 603 
 604     // The current thread already owns the monitor and it has not yet
 605     // been added to the wait queue so the current thread cannot be
 606     // made the successor. This means that the JVMTI_EVENT_MONITOR_WAIT


< prev index next >