21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "jvm.h"
27 #include "classfile/classFileStream.hpp"
28 #include "classfile/classLoader.hpp"
29 #include "classfile/classLoaderData.inline.hpp"
30 #include "classfile/javaAssertions.hpp"
31 #include "classfile/javaClasses.inline.hpp"
32 #include "classfile/moduleEntry.hpp"
33 #include "classfile/modules.hpp"
34 #include "classfile/packageEntry.hpp"
35 #include "classfile/stringTable.hpp"
36 #include "classfile/systemDictionary.hpp"
37 #include "classfile/vmSymbols.hpp"
38 #include "gc/shared/collectedHeap.inline.hpp"
39 #include "interpreter/bytecode.hpp"
40 #include "jfr/jfrEvents.hpp"
41 #include "memory/oopFactory.hpp"
42 #include "memory/referenceType.hpp"
43 #include "memory/resourceArea.hpp"
44 #include "memory/universe.hpp"
45 #include "oops/access.inline.hpp"
46 #include "oops/fieldStreams.hpp"
47 #include "oops/instanceKlass.hpp"
48 #include "oops/method.hpp"
49 #include "oops/objArrayKlass.hpp"
50 #include "oops/objArrayOop.inline.hpp"
51 #include "oops/oop.inline.hpp"
52 #include "prims/jvm_misc.hpp"
53 #include "prims/jvmtiExport.hpp"
54 #include "prims/jvmtiThreadState.hpp"
55 #include "prims/nativeLookup.hpp"
56 #include "prims/privilegedStack.hpp"
57 #include "prims/stackwalk.hpp"
58 #include "runtime/arguments.hpp"
59 #include "runtime/atomic.hpp"
60 #include "runtime/handles.inline.hpp"
3577 JVM_END
3578
3579
3580 JVM_ENTRY(jobject, JVM_NewInstanceFromConstructor(JNIEnv *env, jobject c, jobjectArray args0))
3581 JVMWrapper("JVM_NewInstanceFromConstructor");
3582 oop constructor_mirror = JNIHandles::resolve(c);
3583 objArrayHandle args(THREAD, objArrayOop(JNIHandles::resolve(args0)));
3584 oop result = Reflection::invoke_constructor(constructor_mirror, args, CHECK_NULL);
3585 jobject res = JNIHandles::make_local(env, result);
3586 if (JvmtiExport::should_post_vm_object_alloc()) {
3587 JvmtiExport::post_vm_object_alloc(JavaThread::current(), result);
3588 }
3589 return res;
3590 JVM_END
3591
3592 // Atomic ///////////////////////////////////////////////////////////////////////////////////////////
3593
3594 JVM_LEAF(jboolean, JVM_SupportsCX8())
3595 JVMWrapper("JVM_SupportsCX8");
3596 return VM_Version::supports_cx8();
3597 JVM_END
3598
3599 // Returns an array of all live Thread objects (VM internal JavaThreads,
3600 // jvmti agent threads, and JNI attaching threads are skipped)
3601 // See CR 6404306 regarding JNI attaching threads
3602 JVM_ENTRY(jobjectArray, JVM_GetAllThreads(JNIEnv *env, jclass dummy))
3603 ResourceMark rm(THREAD);
3604 ThreadsListEnumerator tle(THREAD, false, false);
3605 JvmtiVMObjectAllocEventCollector oam;
3606
3607 int num_threads = tle.num_threads();
3608 objArrayOop r = oopFactory::new_objArray(SystemDictionary::Thread_klass(), num_threads, CHECK_NULL);
3609 objArrayHandle threads_ah(THREAD, r);
3610
3611 for (int i = 0; i < num_threads; i++) {
3612 Handle h = tle.get_threadObj(i);
3613 threads_ah->obj_at_put(i, h());
3614 }
3615
3616 return (jobjectArray) JNIHandles::make_local(env, threads_ah());
|
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "jvm.h"
27 #include "classfile/classFileStream.hpp"
28 #include "classfile/classLoader.hpp"
29 #include "classfile/classLoaderData.inline.hpp"
30 #include "classfile/javaAssertions.hpp"
31 #include "classfile/javaClasses.inline.hpp"
32 #include "classfile/moduleEntry.hpp"
33 #include "classfile/modules.hpp"
34 #include "classfile/packageEntry.hpp"
35 #include "classfile/stringTable.hpp"
36 #include "classfile/systemDictionary.hpp"
37 #include "classfile/vmSymbols.hpp"
38 #include "gc/shared/collectedHeap.inline.hpp"
39 #include "interpreter/bytecode.hpp"
40 #include "jfr/jfrEvents.hpp"
41 #include "memory/heapShared.hpp"
42 #include "memory/oopFactory.hpp"
43 #include "memory/referenceType.hpp"
44 #include "memory/resourceArea.hpp"
45 #include "memory/universe.hpp"
46 #include "oops/access.inline.hpp"
47 #include "oops/fieldStreams.hpp"
48 #include "oops/instanceKlass.hpp"
49 #include "oops/method.hpp"
50 #include "oops/objArrayKlass.hpp"
51 #include "oops/objArrayOop.inline.hpp"
52 #include "oops/oop.inline.hpp"
53 #include "prims/jvm_misc.hpp"
54 #include "prims/jvmtiExport.hpp"
55 #include "prims/jvmtiThreadState.hpp"
56 #include "prims/nativeLookup.hpp"
57 #include "prims/privilegedStack.hpp"
58 #include "prims/stackwalk.hpp"
59 #include "runtime/arguments.hpp"
60 #include "runtime/atomic.hpp"
61 #include "runtime/handles.inline.hpp"
3578 JVM_END
3579
3580
3581 JVM_ENTRY(jobject, JVM_NewInstanceFromConstructor(JNIEnv *env, jobject c, jobjectArray args0))
3582 JVMWrapper("JVM_NewInstanceFromConstructor");
3583 oop constructor_mirror = JNIHandles::resolve(c);
3584 objArrayHandle args(THREAD, objArrayOop(JNIHandles::resolve(args0)));
3585 oop result = Reflection::invoke_constructor(constructor_mirror, args, CHECK_NULL);
3586 jobject res = JNIHandles::make_local(env, result);
3587 if (JvmtiExport::should_post_vm_object_alloc()) {
3588 JvmtiExport::post_vm_object_alloc(JavaThread::current(), result);
3589 }
3590 return res;
3591 JVM_END
3592
3593 // Atomic ///////////////////////////////////////////////////////////////////////////////////////////
3594
3595 JVM_LEAF(jboolean, JVM_SupportsCX8())
3596 JVMWrapper("JVM_SupportsCX8");
3597 return VM_Version::supports_cx8();
3598 JVM_END
3599
3600 JVM_ENTRY(void, JVM_InitializeFromArchive(JNIEnv* env, jclass cls))
3601 JVMWrapper("JVM_InitializeFromArchive");
3602 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
3603 assert(k->is_klass(), "just checking");
3604 HeapShared::initialize_from_archived_subgraph(k);
3605 JVM_END
3606
3607 // Returns an array of all live Thread objects (VM internal JavaThreads,
3608 // jvmti agent threads, and JNI attaching threads are skipped)
3609 // See CR 6404306 regarding JNI attaching threads
3610 JVM_ENTRY(jobjectArray, JVM_GetAllThreads(JNIEnv *env, jclass dummy))
3611 ResourceMark rm(THREAD);
3612 ThreadsListEnumerator tle(THREAD, false, false);
3613 JvmtiVMObjectAllocEventCollector oam;
3614
3615 int num_threads = tle.num_threads();
3616 objArrayOop r = oopFactory::new_objArray(SystemDictionary::Thread_klass(), num_threads, CHECK_NULL);
3617 objArrayHandle threads_ah(THREAD, r);
3618
3619 for (int i = 0; i < num_threads; i++) {
3620 Handle h = tle.get_threadObj(i);
3621 threads_ah->obj_at_put(i, h());
3622 }
3623
3624 return (jobjectArray) JNIHandles::make_local(env, threads_ah());
|