Mercurial > hg > graal-jvmci-8
comparison src/share/vm/memory/metaspace.cpp @ 12998:a6177f601c64
8026822: metaspace/flags/maxMetaspaceSize throws OOM of unexpected type.java.lang.OutOfMemoryError: Compressed class space
Summary: Incorporate chunk size when seeing if OutOfMemoryError was caused by Metaspace or Compressed class space.
Reviewed-by: stefank, coleenp
author | hseigel |
---|---|
date | Fri, 25 Oct 2013 11:05:32 -0400 |
parents | 94c0343b1887 |
children | 209aa13ab8c0 |
comparison
equal
deleted
inserted
replaced
12996:d70a665e25d7 | 12998:a6177f601c64 |
---|---|
3310 Copy::fill_to_aligned_words((HeapWord*)result, word_size, 0); | 3310 Copy::fill_to_aligned_words((HeapWord*)result, word_size, 0); |
3311 | 3311 |
3312 return result; | 3312 return result; |
3313 } | 3313 } |
3314 | 3314 |
3315 size_t Metaspace::class_chunk_size(size_t word_size) { | |
3316 assert(using_class_space(), "Has to use class space"); | |
3317 return class_vsm()->calc_chunk_size(word_size); | |
3318 } | |
3319 | |
3315 void Metaspace::report_metadata_oome(ClassLoaderData* loader_data, size_t word_size, MetadataType mdtype, TRAPS) { | 3320 void Metaspace::report_metadata_oome(ClassLoaderData* loader_data, size_t word_size, MetadataType mdtype, TRAPS) { |
3316 // If result is still null, we are out of memory. | 3321 // If result is still null, we are out of memory. |
3317 if (Verbose && TraceMetadataChunkAllocation) { | 3322 if (Verbose && TraceMetadataChunkAllocation) { |
3318 gclog_or_tty->print_cr("Metaspace allocation failed for size " | 3323 gclog_or_tty->print_cr("Metaspace allocation failed for size " |
3319 SIZE_FORMAT, word_size); | 3324 SIZE_FORMAT, word_size); |
3321 loader_data->dump(gclog_or_tty); | 3326 loader_data->dump(gclog_or_tty); |
3322 } | 3327 } |
3323 MetaspaceAux::dump(gclog_or_tty); | 3328 MetaspaceAux::dump(gclog_or_tty); |
3324 } | 3329 } |
3325 | 3330 |
3331 bool out_of_compressed_class_space = false; | |
3332 if (is_class_space_allocation(mdtype)) { | |
3333 Metaspace* metaspace = loader_data->metaspace_non_null(); | |
3334 out_of_compressed_class_space = | |
3335 MetaspaceAux::committed_bytes(Metaspace::ClassType) + | |
3336 (metaspace->class_chunk_size(word_size) * BytesPerWord) > | |
3337 CompressedClassSpaceSize; | |
3338 } | |
3339 | |
3326 // -XX:+HeapDumpOnOutOfMemoryError and -XX:OnOutOfMemoryError support | 3340 // -XX:+HeapDumpOnOutOfMemoryError and -XX:OnOutOfMemoryError support |
3327 const char* space_string = is_class_space_allocation(mdtype) ? "Compressed class space" : | 3341 const char* space_string = out_of_compressed_class_space ? |
3328 "Metadata space"; | 3342 "Compressed class space" : "Metaspace"; |
3343 | |
3329 report_java_out_of_memory(space_string); | 3344 report_java_out_of_memory(space_string); |
3330 | 3345 |
3331 if (JvmtiExport::should_post_resource_exhausted()) { | 3346 if (JvmtiExport::should_post_resource_exhausted()) { |
3332 JvmtiExport::post_resource_exhausted( | 3347 JvmtiExport::post_resource_exhausted( |
3333 JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR, | 3348 JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR, |
3336 | 3351 |
3337 if (!is_init_completed()) { | 3352 if (!is_init_completed()) { |
3338 vm_exit_during_initialization("OutOfMemoryError", space_string); | 3353 vm_exit_during_initialization("OutOfMemoryError", space_string); |
3339 } | 3354 } |
3340 | 3355 |
3341 if (is_class_space_allocation(mdtype)) { | 3356 if (out_of_compressed_class_space) { |
3342 THROW_OOP(Universe::out_of_memory_error_class_metaspace()); | 3357 THROW_OOP(Universe::out_of_memory_error_class_metaspace()); |
3343 } else { | 3358 } else { |
3344 THROW_OOP(Universe::out_of_memory_error_metaspace()); | 3359 THROW_OOP(Universe::out_of_memory_error_metaspace()); |
3345 } | 3360 } |
3346 } | 3361 } |