3508 if (JvmtiExport::should_post_vm_object_alloc()) { 3509 JvmtiExport::post_vm_object_alloc(JavaThread::current(), result); 3510 } 3511 return res; 3512 JVM_END 3513 3514 // Atomic /////////////////////////////////////////////////////////////////////////////////////////// 3515 3516 JVM_LEAF(jboolean, JVM_SupportsCX8()) 3517 JVMWrapper("JVM_SupportsCX8"); 3518 return VM_Version::supports_cx8(); 3519 JVM_END 3520 3521 JVM_ENTRY(void, JVM_InitializeFromArchive(JNIEnv* env, jclass cls)) 3522 JVMWrapper("JVM_InitializeFromArchive"); 3523 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); 3524 assert(k->is_klass(), "just checking"); 3525 HeapShared::initialize_from_archived_subgraph(k); 3526 JVM_END 3527 3528 // Returns an array of all live Thread objects (VM internal JavaThreads, 3529 // jvmti agent threads, and JNI attaching threads are skipped) 3530 // See CR 6404306 regarding JNI attaching threads 3531 JVM_ENTRY(jobjectArray, JVM_GetAllThreads(JNIEnv *env, jclass dummy)) 3532 ResourceMark rm(THREAD); 3533 ThreadsListEnumerator tle(THREAD, false, false); 3534 JvmtiVMObjectAllocEventCollector oam; 3535 3536 int num_threads = tle.num_threads(); 3537 objArrayOop r = oopFactory::new_objArray(SystemDictionary::Thread_klass(), num_threads, CHECK_NULL); 3538 objArrayHandle threads_ah(THREAD, r); 3539 3540 for (int i = 0; i < num_threads; i++) { 3541 Handle h = tle.get_threadObj(i); 3542 threads_ah->obj_at_put(i, h()); 3543 } 3544 3545 return (jobjectArray) JNIHandles::make_local(env, threads_ah()); 3546 JVM_END 3547 | 3508 if (JvmtiExport::should_post_vm_object_alloc()) { 3509 JvmtiExport::post_vm_object_alloc(JavaThread::current(), result); 3510 } 3511 return res; 3512 JVM_END 3513 3514 // Atomic /////////////////////////////////////////////////////////////////////////////////////////// 3515 3516 JVM_LEAF(jboolean, JVM_SupportsCX8()) 3517 JVMWrapper("JVM_SupportsCX8"); 3518 return VM_Version::supports_cx8(); 3519 JVM_END 3520 3521 JVM_ENTRY(void, JVM_InitializeFromArchive(JNIEnv* env, jclass cls)) 3522 JVMWrapper("JVM_InitializeFromArchive"); 3523 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); 3524 assert(k->is_klass(), "just checking"); 3525 HeapShared::initialize_from_archived_subgraph(k); 3526 JVM_END 3527 3528 JVM_ENTRY(void, JVM_LinkClassesForCDS(JNIEnv *env)) 3529 JVMWrapper("JVM_LinkClassesForCDS"); 3530 if (DynamicDumpSharedSpaces) { 3531 MetaspaceShared::link_and_cleanup_shared_classes(false, THREAD); 3532 } 3533 JVM_END 3534 3535 // Returns an array of all live Thread objects (VM internal JavaThreads, 3536 // jvmti agent threads, and JNI attaching threads are skipped) 3537 // See CR 6404306 regarding JNI attaching threads 3538 JVM_ENTRY(jobjectArray, JVM_GetAllThreads(JNIEnv *env, jclass dummy)) 3539 ResourceMark rm(THREAD); 3540 ThreadsListEnumerator tle(THREAD, false, false); 3541 JvmtiVMObjectAllocEventCollector oam; 3542 3543 int num_threads = tle.num_threads(); 3544 objArrayOop r = oopFactory::new_objArray(SystemDictionary::Thread_klass(), num_threads, CHECK_NULL); 3545 objArrayHandle threads_ah(THREAD, r); 3546 3547 for (int i = 0; i < num_threads; i++) { 3548 Handle h = tle.get_threadObj(i); 3549 threads_ah->obj_at_put(i, h()); 3550 } 3551 3552 return (jobjectArray) JNIHandles::make_local(env, threads_ah()); 3553 JVM_END 3554 |