62 return array;
63 }
64
65 template <typename T>
66 static void free_array(ClassLoaderData* loader_data, Array<T>* data) {
67 if (data != NULL) {
68 assert(loader_data != NULL, "shouldn't pass null");
69 assert(!data->is_shared(), "cannot deallocate array in shared spaces");
70 int size = data->size();
71 if (DumpSharedSpaces) {
72 loader_data->ro_metaspace()->deallocate((MetaWord*)data, size, false);
73 } else {
74 loader_data->metaspace_non_null()->deallocate((MetaWord*)data, size, false);
75 }
76 }
77 }
78
79 // Deallocation method for metadata
80 template <class T>
81 static void free_metadata(ClassLoaderData* loader_data, T md) {
82 if (md != NULL) {
83 assert(loader_data != NULL, "shouldn't pass null");
84 int size = md->size();
85 // Call metadata's deallocate function which will call deallocate fields
86 assert(!DumpSharedSpaces, "cannot deallocate metadata when dumping CDS archive");
87 assert(!md->on_stack(), "can't deallocate things on stack");
88 assert(!md->is_shared(), "cannot deallocate if in shared spaces");
89 md->deallocate_contents(loader_data);
90 loader_data->metaspace_non_null()->deallocate((MetaWord*)md, size, md->is_klass());
91 }
92 }
93 };
94
95 #endif // SHARE_VM_MEMORY_METADATAFACTORY_HPP
|
62 return array;
63 }
64
65 template <typename T>
66 static void free_array(ClassLoaderData* loader_data, Array<T>* data) {
67 if (data != NULL) {
68 assert(loader_data != NULL, "shouldn't pass null");
69 assert(!data->is_shared(), "cannot deallocate array in shared spaces");
70 int size = data->size();
71 if (DumpSharedSpaces) {
72 loader_data->ro_metaspace()->deallocate((MetaWord*)data, size, false);
73 } else {
74 loader_data->metaspace_non_null()->deallocate((MetaWord*)data, size, false);
75 }
76 }
77 }
78
79 // Deallocation method for metadata
80 template <class T>
81 static void free_metadata(ClassLoaderData* loader_data, T md) {
82 if (DumpSharedSpaces) {
83 // FIXME: the freeing code is buggy, especially when PrintSharedSpaces is enabled.
84 // Disable for now -- this means if you specify bad classes in your classlist you
85 // may have wasted space inside the archive.
86 return;
87 }
88 if (md != NULL) {
89 assert(loader_data != NULL, "shouldn't pass null");
90 int size = md->size();
91 // Call metadata's deallocate function which will call deallocate fields
92 assert(!DumpSharedSpaces, "cannot deallocate metadata when dumping CDS archive");
93 assert(!md->on_stack(), "can't deallocate things on stack");
94 assert(!md->is_shared(), "cannot deallocate if in shared spaces");
95 md->deallocate_contents(loader_data);
96 loader_data->metaspace_non_null()->deallocate((MetaWord*)md, size, md->is_klass());
97 }
98 }
99 };
100
101 #endif // SHARE_VM_MEMORY_METADATAFACTORY_HPP
|