3140 }
3141
3142 void Metaspace::global_initialize() {
3143 MetaspaceGC::initialize();
3144
3145 // Initialize the alignment for shared spaces.
3146 int max_alignment = os::vm_allocation_granularity();
3147 size_t cds_total = 0;
3148
3149 MetaspaceShared::set_max_alignment(max_alignment);
3150
3151 if (DumpSharedSpaces) {
3152 #if INCLUDE_CDS
3153 MetaspaceShared::estimate_regions_size();
3154
3155 SharedReadOnlySize = align_size_up(SharedReadOnlySize, max_alignment);
3156 SharedReadWriteSize = align_size_up(SharedReadWriteSize, max_alignment);
3157 SharedMiscDataSize = align_size_up(SharedMiscDataSize, max_alignment);
3158 SharedMiscCodeSize = align_size_up(SharedMiscCodeSize, max_alignment);
3159
3160 // the min_misc_code_size estimate is based on MetaspaceShared::generate_vtable_methods()
3161 uintx min_misc_code_size = align_size_up(
3162 (MetaspaceShared::num_virtuals * MetaspaceShared::vtbl_list_size) *
3163 (sizeof(void*) + MetaspaceShared::vtbl_method_size) + MetaspaceShared::vtbl_common_code_size,
3164 max_alignment);
3165
3166 if (SharedMiscCodeSize < min_misc_code_size) {
3167 report_out_of_shared_space(SharedMiscCode);
3168 }
3169
3170 // Initialize with the sum of the shared space sizes. The read-only
3171 // and read write metaspace chunks will be allocated out of this and the
3172 // remainder is the misc code and data chunks.
3173 cds_total = FileMapInfo::shared_spaces_size();
3174 cds_total = align_size_up(cds_total, _reserve_alignment);
3175 _space_list = new VirtualSpaceList(cds_total/wordSize);
3176 _chunk_manager_metadata = new ChunkManager(SpecializedChunk, SmallChunk, MediumChunk);
3177
3178 if (!_space_list->initialization_succeeded()) {
3179 vm_exit_during_initialization("Unable to dump shared archive.", NULL);
3180 }
|
3140 }
3141
3142 void Metaspace::global_initialize() {
3143 MetaspaceGC::initialize();
3144
3145 // Initialize the alignment for shared spaces.
3146 int max_alignment = os::vm_allocation_granularity();
3147 size_t cds_total = 0;
3148
3149 MetaspaceShared::set_max_alignment(max_alignment);
3150
3151 if (DumpSharedSpaces) {
3152 #if INCLUDE_CDS
3153 MetaspaceShared::estimate_regions_size();
3154
3155 SharedReadOnlySize = align_size_up(SharedReadOnlySize, max_alignment);
3156 SharedReadWriteSize = align_size_up(SharedReadWriteSize, max_alignment);
3157 SharedMiscDataSize = align_size_up(SharedMiscDataSize, max_alignment);
3158 SharedMiscCodeSize = align_size_up(SharedMiscCodeSize, max_alignment);
3159
3160 // make sure SharedReadOnlySize and SharedReadWriteSize are not less than
3161 // the minimum values.
3162 if (SharedReadOnlySize < MetaspaceShared::min_ro_size){
3163 report_out_of_shared_space(SharedReadOnly);
3164 }
3165
3166 if (SharedReadWriteSize < MetaspaceShared::min_rw_size){
3167 report_out_of_shared_space(SharedReadWrite);
3168 }
3169
3170 // the min_misc_data_size and min_misc_code_size estimates are based on
3171 // MetaspaceShared::generate_vtable_methods()
3172 uint min_misc_data_size = align_size_up(
3173 MetaspaceShared::num_virtuals * MetaspaceShared::vtbl_list_size * sizeof(void*), max_alignment);
3174
3175 if (SharedMiscDataSize < min_misc_data_size) {
3176 report_out_of_shared_space(SharedMiscData);
3177 }
3178
3179 uintx min_misc_code_size = align_size_up(
3180 (MetaspaceShared::num_virtuals * MetaspaceShared::vtbl_list_size) *
3181 (sizeof(void*) + MetaspaceShared::vtbl_method_size) + MetaspaceShared::vtbl_common_code_size,
3182 max_alignment);
3183
3184 if (SharedMiscCodeSize < min_misc_code_size) {
3185 report_out_of_shared_space(SharedMiscCode);
3186 }
3187
3188 // Initialize with the sum of the shared space sizes. The read-only
3189 // and read write metaspace chunks will be allocated out of this and the
3190 // remainder is the misc code and data chunks.
3191 cds_total = FileMapInfo::shared_spaces_size();
3192 cds_total = align_size_up(cds_total, _reserve_alignment);
3193 _space_list = new VirtualSpaceList(cds_total/wordSize);
3194 _chunk_manager_metadata = new ChunkManager(SpecializedChunk, SmallChunk, MediumChunk);
3195
3196 if (!_space_list->initialization_succeeded()) {
3197 vm_exit_during_initialization("Unable to dump shared archive.", NULL);
3198 }
|