Mercurial > hg > truffle
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 |