comparison src/share/vm/prims/whitebox.cpp @ 20540:b509b7ff561c

8049599: MetaspaceGC::_capacity_until_GC can overflow Reviewed-by: jmasa, stefank
author ehelin
date Wed, 01 Oct 2014 16:09:01 +0200
parents 7301840ea20e
children 417e3b8d04c5
comparison
equal deleted inserted replaced
20539:1fa6d1542e32 20540:b509b7ff561c
790 ClassLoaderData* cld = class_loader_oop != NULL 790 ClassLoaderData* cld = class_loader_oop != NULL
791 ? java_lang_ClassLoader::loader_data(class_loader_oop) 791 ? java_lang_ClassLoader::loader_data(class_loader_oop)
792 : ClassLoaderData::the_null_class_loader_data(); 792 : ClassLoaderData::the_null_class_loader_data();
793 793
794 MetadataFactory::free_array(cld, (Array<u1>*)(uintptr_t)addr); 794 MetadataFactory::free_array(cld, (Array<u1>*)(uintptr_t)addr);
795 WB_END
796
797 WB_ENTRY(jlong, WB_IncMetaspaceCapacityUntilGC(JNIEnv* env, jobject wb, jlong inc))
798 if (inc < 0) {
799 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
800 err_msg("WB_IncMetaspaceCapacityUntilGC: inc is negative: " JLONG_FORMAT, inc));
801 }
802
803 jlong max_size_t = (jlong) ((size_t) -1);
804 if (inc > max_size_t) {
805 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
806 err_msg("WB_IncMetaspaceCapacityUntilGC: inc does not fit in size_t: " JLONG_FORMAT, inc));
807 }
808
809 size_t new_cap_until_GC = 0;
810 size_t aligned_inc = align_size_down((size_t) inc, Metaspace::commit_alignment());
811 bool success = MetaspaceGC::inc_capacity_until_GC(aligned_inc, &new_cap_until_GC);
812 if (!success) {
813 THROW_MSG_0(vmSymbols::java_lang_IllegalStateException(),
814 "WB_IncMetaspaceCapacityUntilGC: could not increase capacity until GC "
815 "due to contention with another thread");
816 }
817 return (jlong) new_cap_until_GC;
818 WB_END
819
820 WB_ENTRY(jlong, WB_MetaspaceCapacityUntilGC(JNIEnv* env, jobject wb))
821 return (jlong) MetaspaceGC::capacity_until_GC();
795 WB_END 822 WB_END
796 823
797 //Some convenience methods to deal with objects from java 824 //Some convenience methods to deal with objects from java
798 int WhiteBox::offset_for_field(const char* field_name, oop object, 825 int WhiteBox::offset_for_field(const char* field_name, oop object,
799 Symbol* signature_symbol) { 826 Symbol* signature_symbol) {
960 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory }, 987 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory },
961 {CC"allocateMetaspace", 988 {CC"allocateMetaspace",
962 CC"(Ljava/lang/ClassLoader;J)J", (void*)&WB_AllocateMetaspace }, 989 CC"(Ljava/lang/ClassLoader;J)J", (void*)&WB_AllocateMetaspace },
963 {CC"freeMetaspace", 990 {CC"freeMetaspace",
964 CC"(Ljava/lang/ClassLoader;JJ)V", (void*)&WB_FreeMetaspace }, 991 CC"(Ljava/lang/ClassLoader;JJ)V", (void*)&WB_FreeMetaspace },
992 {CC"incMetaspaceCapacityUntilGC", CC"(J)J", (void*)&WB_IncMetaspaceCapacityUntilGC },
993 {CC"metaspaceCapacityUntilGC", CC"()J", (void*)&WB_MetaspaceCapacityUntilGC },
965 {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures }, 994 {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures },
966 {CC"getNMethod", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;", 995 {CC"getNMethod", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;",
967 (void*)&WB_GetNMethod }, 996 (void*)&WB_GetNMethod },
968 }; 997 };
969 998