src/share/vm/memory/metadataFactory.hpp

Print this page
rev 6853 : 8046070: Class Data Sharing clean up and refactoring
Summary: Cleaned up CDS to be more configurable, maintainable and extensible
Reviewed-by: dholmes, coleenp, acorn, mchung


  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