Mercurial > hg > graal-jvmci-8
comparison src/share/vm/prims/whitebox.cpp @ 20278:2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
Reviewed-by: tschatzl, ehelin, brutisso, coleenp, roland, iveresov
Contributed-by: stefan.karlsson@oracle.com, mikael.gerdin@oracle.com
author | stefank |
---|---|
date | Mon, 07 Jul 2014 10:12:40 +0200 |
parents | 0c48231c5c84 |
children | 6701abbc4441 |
comparison
equal
deleted
inserted
replaced
20277:882004b9e7e1 | 20278:2c6ef90f030a |
---|---|
22 * | 22 * |
23 */ | 23 */ |
24 | 24 |
25 #include "precompiled.hpp" | 25 #include "precompiled.hpp" |
26 | 26 |
27 #include "memory/metadataFactory.hpp" | |
27 #include "memory/universe.hpp" | 28 #include "memory/universe.hpp" |
28 #include "oops/oop.inline.hpp" | 29 #include "oops/oop.inline.hpp" |
29 | 30 |
30 #include "classfile/symbolTable.hpp" | 31 #include "classfile/symbolTable.hpp" |
31 #include "classfile/classLoaderData.hpp" | 32 #include "classfile/classLoaderData.hpp" |
34 #include "prims/wbtestmethods/parserTests.hpp" | 35 #include "prims/wbtestmethods/parserTests.hpp" |
35 | 36 |
36 #include "runtime/arguments.hpp" | 37 #include "runtime/arguments.hpp" |
37 #include "runtime/interfaceSupport.hpp" | 38 #include "runtime/interfaceSupport.hpp" |
38 #include "runtime/os.hpp" | 39 #include "runtime/os.hpp" |
40 #include "utilities/array.hpp" | |
39 #include "utilities/debug.hpp" | 41 #include "utilities/debug.hpp" |
40 #include "utilities/macros.hpp" | 42 #include "utilities/macros.hpp" |
41 #include "utilities/exceptions.hpp" | 43 #include "utilities/exceptions.hpp" |
42 | 44 |
43 #if INCLUDE_ALL_GCS | 45 #if INCLUDE_ALL_GCS |
722 env->SetObjectArrayElement(result, 1, insts); | 724 env->SetObjectArrayElement(result, 1, insts); |
723 | 725 |
724 return result; | 726 return result; |
725 WB_END | 727 WB_END |
726 | 728 |
729 | |
730 int WhiteBox::array_bytes_to_length(size_t bytes) { | |
731 return Array<u1>::bytes_to_length(bytes); | |
732 } | |
733 | |
734 WB_ENTRY(jlong, WB_AllocateMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong size)) | |
735 if (size < 0) { | |
736 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), | |
737 err_msg("WB_AllocateMetaspace: size is negative: " JLONG_FORMAT, size)); | |
738 } | |
739 | |
740 oop class_loader_oop = JNIHandles::resolve(class_loader); | |
741 ClassLoaderData* cld = class_loader_oop != NULL | |
742 ? java_lang_ClassLoader::loader_data(class_loader_oop) | |
743 : ClassLoaderData::the_null_class_loader_data(); | |
744 | |
745 void* metadata = MetadataFactory::new_writeable_array<u1>(cld, WhiteBox::array_bytes_to_length((size_t)size), thread); | |
746 | |
747 return (jlong)(uintptr_t)metadata; | |
748 WB_END | |
749 | |
750 WB_ENTRY(void, WB_FreeMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong addr, jlong size)) | |
751 oop class_loader_oop = JNIHandles::resolve(class_loader); | |
752 ClassLoaderData* cld = class_loader_oop != NULL | |
753 ? java_lang_ClassLoader::loader_data(class_loader_oop) | |
754 : ClassLoaderData::the_null_class_loader_data(); | |
755 | |
756 MetadataFactory::free_array(cld, (Array<u1>*)(uintptr_t)addr); | |
757 WB_END | |
727 | 758 |
728 //Some convenience methods to deal with objects from java | 759 //Some convenience methods to deal with objects from java |
729 int WhiteBox::offset_for_field(const char* field_name, oop object, | 760 int WhiteBox::offset_for_field(const char* field_name, oop object, |
730 Symbol* signature_symbol) { | 761 Symbol* signature_symbol) { |
731 assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid"); | 762 assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid"); |
853 {CC"getStringVMFlag", CC"(Ljava/lang/String;)Ljava/lang/String;", | 884 {CC"getStringVMFlag", CC"(Ljava/lang/String;)Ljava/lang/String;", |
854 (void*)&WB_GetStringVMFlag}, | 885 (void*)&WB_GetStringVMFlag}, |
855 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable }, | 886 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable }, |
856 {CC"fullGC", CC"()V", (void*)&WB_FullGC }, | 887 {CC"fullGC", CC"()V", (void*)&WB_FullGC }, |
857 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory }, | 888 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory }, |
889 {CC"allocateMetaspace", | |
890 CC"(Ljava/lang/ClassLoader;J)J", (void*)&WB_AllocateMetaspace }, | |
891 {CC"freeMetaspace", | |
892 CC"(Ljava/lang/ClassLoader;JJ)V", (void*)&WB_FreeMetaspace }, | |
858 {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures }, | 893 {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures }, |
859 {CC"getNMethod", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;", | 894 {CC"getNMethod", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;", |
860 (void*)&WB_GetNMethod }, | 895 (void*)&WB_GetNMethod }, |
861 }; | 896 }; |
862 | 897 |