1436 JavaThread* t = JavaThread::current();
1437 return (jlong) t->stack_available(os::current_stack_pointer()) - (jlong)JavaThread::stack_shadow_zone_size();
1438 WB_END
1439
1440
1441 int WhiteBox::array_bytes_to_length(size_t bytes) {
1442 return Array<u1>::bytes_to_length(bytes);
1443 }
1444
1445 WB_ENTRY(jlong, WB_AllocateMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong size))
1446 if (size < 0) {
1447 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
1448 err_msg("WB_AllocateMetaspace: size is negative: " JLONG_FORMAT, size));
1449 }
1450
1451 oop class_loader_oop = JNIHandles::resolve(class_loader);
1452 ClassLoaderData* cld = class_loader_oop != NULL
1453 ? java_lang_ClassLoader::loader_data(class_loader_oop)
1454 : ClassLoaderData::the_null_class_loader_data();
1455
1456 void* metadata = MetadataFactory::new_writeable_array<u1>(cld, WhiteBox::array_bytes_to_length((size_t)size), thread);
1457
1458 return (jlong)(uintptr_t)metadata;
1459 WB_END
1460
1461 WB_ENTRY(void, WB_FreeMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong addr, jlong size))
1462 oop class_loader_oop = JNIHandles::resolve(class_loader);
1463 ClassLoaderData* cld = class_loader_oop != NULL
1464 ? java_lang_ClassLoader::loader_data(class_loader_oop)
1465 : ClassLoaderData::the_null_class_loader_data();
1466
1467 MetadataFactory::free_array(cld, (Array<u1>*)(uintptr_t)addr);
1468 WB_END
1469
1470 WB_ENTRY(void, WB_DefineModule(JNIEnv* env, jobject o, jobject module, jboolean is_open,
1471 jstring version, jstring location, jobjectArray packages))
1472 ResourceMark rm(THREAD);
1473
1474 objArrayOop packages_oop = objArrayOop(JNIHandles::resolve(packages));
1475 objArrayHandle packages_h(THREAD, packages_oop);
1476 int num_packages = (packages_h == NULL ? 0 : packages_h->length());
1544
1545 size_t new_cap_until_GC = 0;
1546 size_t aligned_inc = align_size_down((size_t) inc, Metaspace::commit_alignment());
1547 bool success = MetaspaceGC::inc_capacity_until_GC(aligned_inc, &new_cap_until_GC);
1548 if (!success) {
1549 THROW_MSG_0(vmSymbols::java_lang_IllegalStateException(),
1550 "WB_IncMetaspaceCapacityUntilGC: could not increase capacity until GC "
1551 "due to contention with another thread");
1552 }
1553 return (jlong) new_cap_until_GC;
1554 WB_END
1555
1556 WB_ENTRY(jlong, WB_MetaspaceCapacityUntilGC(JNIEnv* env, jobject wb))
1557 return (jlong) MetaspaceGC::capacity_until_GC();
1558 WB_END
1559
1560 WB_ENTRY(jboolean, WB_MetaspaceShouldConcurrentCollect(JNIEnv* env, jobject wb))
1561 return MetaspaceGC::should_concurrent_collect();
1562 WB_END
1563
1564
1565 WB_ENTRY(void, WB_AssertMatchingSafepointCalls(JNIEnv* env, jobject o, jboolean mutexSafepointValue, jboolean attemptedNoSafepointValue))
1566 Monitor::SafepointCheckRequired sfpt_check_required = mutexSafepointValue ?
1567 Monitor::_safepoint_check_always :
1568 Monitor::_safepoint_check_never;
1569 MutexLockerEx ml(new Mutex(Mutex::leaf, "SFPT_Test_lock", true, sfpt_check_required),
1570 attemptedNoSafepointValue == JNI_TRUE);
1571 WB_END
1572
1573 WB_ENTRY(jboolean, WB_IsMonitorInflated(JNIEnv* env, jobject wb, jobject obj))
1574 oop obj_oop = JNIHandles::resolve(obj);
1575 return (jboolean) obj_oop->mark()->has_monitor();
1576 WB_END
1577
1578 WB_ENTRY(void, WB_ForceSafepoint(JNIEnv* env, jobject wb))
1579 VM_ForceSafepoint force_safepoint_op;
1580 VMThread::execute(&force_safepoint_op);
1581 WB_END
1582
1583 WB_ENTRY(jlong, WB_GetConstantPool(JNIEnv* env, jobject wb, jclass klass))
1928 (void*)&WB_GetUintxVMFlag},
1929 {CC"getUint64VMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;",
1930 (void*)&WB_GetUint64VMFlag},
1931 {CC"getSizeTVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;",
1932 (void*)&WB_GetSizeTVMFlag},
1933 {CC"getDoubleVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Double;",
1934 (void*)&WB_GetDoubleVMFlag},
1935 {CC"getStringVMFlag", CC"(Ljava/lang/String;)Ljava/lang/String;",
1936 (void*)&WB_GetStringVMFlag},
1937 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable },
1938 {CC"fullGC", CC"()V", (void*)&WB_FullGC },
1939 {CC"youngGC", CC"()V", (void*)&WB_YoungGC },
1940 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory },
1941 {CC"allocateMetaspace",
1942 CC"(Ljava/lang/ClassLoader;J)J", (void*)&WB_AllocateMetaspace },
1943 {CC"freeMetaspace",
1944 CC"(Ljava/lang/ClassLoader;JJ)V", (void*)&WB_FreeMetaspace },
1945 {CC"incMetaspaceCapacityUntilGC", CC"(J)J", (void*)&WB_IncMetaspaceCapacityUntilGC },
1946 {CC"metaspaceCapacityUntilGC", CC"()J", (void*)&WB_MetaspaceCapacityUntilGC },
1947 {CC"metaspaceShouldConcurrentCollect", CC"()Z", (void*)&WB_MetaspaceShouldConcurrentCollect },
1948 {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures },
1949 {CC"getNMethod0", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;",
1950 (void*)&WB_GetNMethod },
1951 {CC"forceNMethodSweep", CC"()V", (void*)&WB_ForceNMethodSweep },
1952 {CC"allocateCodeBlob", CC"(II)J", (void*)&WB_AllocateCodeBlob },
1953 {CC"freeCodeBlob", CC"(J)V", (void*)&WB_FreeCodeBlob },
1954 {CC"getCodeHeapEntries", CC"(I)[Ljava/lang/Object;",(void*)&WB_GetCodeHeapEntries },
1955 {CC"getCompilationActivityMode",
1956 CC"()I", (void*)&WB_GetCompilationActivityMode},
1957 {CC"getMethodData0", CC"(Ljava/lang/reflect/Executable;)J",
1958 (void*)&WB_GetMethodData },
1959 {CC"getCodeBlob", CC"(J)[Ljava/lang/Object;",(void*)&WB_GetCodeBlob },
1960 {CC"getThreadStackSize", CC"()J", (void*)&WB_GetThreadStackSize },
1961 {CC"getThreadRemainingStackSize", CC"()J", (void*)&WB_GetThreadRemainingStackSize },
1962 {CC"DefineModule", CC"(Ljava/lang/Object;ZLjava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V",
1963 (void*)&WB_DefineModule },
1964 {CC"AddModuleExports", CC"(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V",
1965 (void*)&WB_AddModuleExports },
1966 {CC"AddReadsModule", CC"(Ljava/lang/Object;Ljava/lang/Object;)V",
1967 (void*)&WB_AddReadsModule },
|
1436 JavaThread* t = JavaThread::current();
1437 return (jlong) t->stack_available(os::current_stack_pointer()) - (jlong)JavaThread::stack_shadow_zone_size();
1438 WB_END
1439
1440
1441 int WhiteBox::array_bytes_to_length(size_t bytes) {
1442 return Array<u1>::bytes_to_length(bytes);
1443 }
1444
1445 WB_ENTRY(jlong, WB_AllocateMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong size))
1446 if (size < 0) {
1447 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
1448 err_msg("WB_AllocateMetaspace: size is negative: " JLONG_FORMAT, size));
1449 }
1450
1451 oop class_loader_oop = JNIHandles::resolve(class_loader);
1452 ClassLoaderData* cld = class_loader_oop != NULL
1453 ? java_lang_ClassLoader::loader_data(class_loader_oop)
1454 : ClassLoaderData::the_null_class_loader_data();
1455
1456 void* metadata = MetadataFactory::new_array<u1>(cld, WhiteBox::array_bytes_to_length((size_t)size), thread);
1457
1458 return (jlong)(uintptr_t)metadata;
1459 WB_END
1460
1461 WB_ENTRY(void, WB_FreeMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong addr, jlong size))
1462 oop class_loader_oop = JNIHandles::resolve(class_loader);
1463 ClassLoaderData* cld = class_loader_oop != NULL
1464 ? java_lang_ClassLoader::loader_data(class_loader_oop)
1465 : ClassLoaderData::the_null_class_loader_data();
1466
1467 MetadataFactory::free_array(cld, (Array<u1>*)(uintptr_t)addr);
1468 WB_END
1469
1470 WB_ENTRY(void, WB_DefineModule(JNIEnv* env, jobject o, jobject module, jboolean is_open,
1471 jstring version, jstring location, jobjectArray packages))
1472 ResourceMark rm(THREAD);
1473
1474 objArrayOop packages_oop = objArrayOop(JNIHandles::resolve(packages));
1475 objArrayHandle packages_h(THREAD, packages_oop);
1476 int num_packages = (packages_h == NULL ? 0 : packages_h->length());
1544
1545 size_t new_cap_until_GC = 0;
1546 size_t aligned_inc = align_size_down((size_t) inc, Metaspace::commit_alignment());
1547 bool success = MetaspaceGC::inc_capacity_until_GC(aligned_inc, &new_cap_until_GC);
1548 if (!success) {
1549 THROW_MSG_0(vmSymbols::java_lang_IllegalStateException(),
1550 "WB_IncMetaspaceCapacityUntilGC: could not increase capacity until GC "
1551 "due to contention with another thread");
1552 }
1553 return (jlong) new_cap_until_GC;
1554 WB_END
1555
1556 WB_ENTRY(jlong, WB_MetaspaceCapacityUntilGC(JNIEnv* env, jobject wb))
1557 return (jlong) MetaspaceGC::capacity_until_GC();
1558 WB_END
1559
1560 WB_ENTRY(jboolean, WB_MetaspaceShouldConcurrentCollect(JNIEnv* env, jobject wb))
1561 return MetaspaceGC::should_concurrent_collect();
1562 WB_END
1563
1564 WB_ENTRY(jlong, WB_MetaspaceReserveAlignment(JNIEnv* env, jobject wb))
1565 return (jlong)Metaspace::reserve_alignment();
1566 WB_END
1567
1568 WB_ENTRY(void, WB_AssertMatchingSafepointCalls(JNIEnv* env, jobject o, jboolean mutexSafepointValue, jboolean attemptedNoSafepointValue))
1569 Monitor::SafepointCheckRequired sfpt_check_required = mutexSafepointValue ?
1570 Monitor::_safepoint_check_always :
1571 Monitor::_safepoint_check_never;
1572 MutexLockerEx ml(new Mutex(Mutex::leaf, "SFPT_Test_lock", true, sfpt_check_required),
1573 attemptedNoSafepointValue == JNI_TRUE);
1574 WB_END
1575
1576 WB_ENTRY(jboolean, WB_IsMonitorInflated(JNIEnv* env, jobject wb, jobject obj))
1577 oop obj_oop = JNIHandles::resolve(obj);
1578 return (jboolean) obj_oop->mark()->has_monitor();
1579 WB_END
1580
1581 WB_ENTRY(void, WB_ForceSafepoint(JNIEnv* env, jobject wb))
1582 VM_ForceSafepoint force_safepoint_op;
1583 VMThread::execute(&force_safepoint_op);
1584 WB_END
1585
1586 WB_ENTRY(jlong, WB_GetConstantPool(JNIEnv* env, jobject wb, jclass klass))
1931 (void*)&WB_GetUintxVMFlag},
1932 {CC"getUint64VMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;",
1933 (void*)&WB_GetUint64VMFlag},
1934 {CC"getSizeTVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;",
1935 (void*)&WB_GetSizeTVMFlag},
1936 {CC"getDoubleVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Double;",
1937 (void*)&WB_GetDoubleVMFlag},
1938 {CC"getStringVMFlag", CC"(Ljava/lang/String;)Ljava/lang/String;",
1939 (void*)&WB_GetStringVMFlag},
1940 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable },
1941 {CC"fullGC", CC"()V", (void*)&WB_FullGC },
1942 {CC"youngGC", CC"()V", (void*)&WB_YoungGC },
1943 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory },
1944 {CC"allocateMetaspace",
1945 CC"(Ljava/lang/ClassLoader;J)J", (void*)&WB_AllocateMetaspace },
1946 {CC"freeMetaspace",
1947 CC"(Ljava/lang/ClassLoader;JJ)V", (void*)&WB_FreeMetaspace },
1948 {CC"incMetaspaceCapacityUntilGC", CC"(J)J", (void*)&WB_IncMetaspaceCapacityUntilGC },
1949 {CC"metaspaceCapacityUntilGC", CC"()J", (void*)&WB_MetaspaceCapacityUntilGC },
1950 {CC"metaspaceShouldConcurrentCollect", CC"()Z", (void*)&WB_MetaspaceShouldConcurrentCollect },
1951 {CC"metaspaceReserveAlignment", CC"()J", (void*)&WB_MetaspaceReserveAlignment },
1952 {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures },
1953 {CC"getNMethod0", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;",
1954 (void*)&WB_GetNMethod },
1955 {CC"forceNMethodSweep", CC"()V", (void*)&WB_ForceNMethodSweep },
1956 {CC"allocateCodeBlob", CC"(II)J", (void*)&WB_AllocateCodeBlob },
1957 {CC"freeCodeBlob", CC"(J)V", (void*)&WB_FreeCodeBlob },
1958 {CC"getCodeHeapEntries", CC"(I)[Ljava/lang/Object;",(void*)&WB_GetCodeHeapEntries },
1959 {CC"getCompilationActivityMode",
1960 CC"()I", (void*)&WB_GetCompilationActivityMode},
1961 {CC"getMethodData0", CC"(Ljava/lang/reflect/Executable;)J",
1962 (void*)&WB_GetMethodData },
1963 {CC"getCodeBlob", CC"(J)[Ljava/lang/Object;",(void*)&WB_GetCodeBlob },
1964 {CC"getThreadStackSize", CC"()J", (void*)&WB_GetThreadStackSize },
1965 {CC"getThreadRemainingStackSize", CC"()J", (void*)&WB_GetThreadRemainingStackSize },
1966 {CC"DefineModule", CC"(Ljava/lang/Object;ZLjava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V",
1967 (void*)&WB_DefineModule },
1968 {CC"AddModuleExports", CC"(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V",
1969 (void*)&WB_AddModuleExports },
1970 {CC"AddReadsModule", CC"(Ljava/lang/Object;Ljava/lang/Object;)V",
1971 (void*)&WB_AddReadsModule },
|