1.1 --- a/src/share/vm/memory/metaspace.cpp Fri Nov 16 16:14:15 2018 +0800 1.2 +++ b/src/share/vm/memory/metaspace.cpp Thu Nov 22 11:02:39 2018 +0800 1.3 @@ -3046,10 +3046,53 @@ 1.4 // Don't use large pages for the class space. 1.5 bool large_pages = false; 1.6 1.7 +#ifndef MIPS64 1.8 ReservedSpace metaspace_rs = ReservedSpace(compressed_class_space_size(), 1.9 _reserve_alignment, 1.10 large_pages, 1.11 requested_addr, 0); 1.12 +#else // MIPS64 1.13 + ReservedSpace metaspace_rs; 1.14 + 1.15 + // Our compressed klass pointers may fit nicely into the lower 32 1.16 + // bits. 1.17 + if ((uint64_t)requested_addr + compressed_class_space_size() < 4*G) { 1.18 + metaspace_rs = ReservedSpace(compressed_class_space_size(), 1.19 + _reserve_alignment, 1.20 + large_pages, 1.21 + requested_addr); 1.22 + } 1.23 + 1.24 + if (! metaspace_rs.is_reserved()) { 1.25 + size_t increment = 4*G; 1.26 + for (char *a = (char *)align_ptr_up(requested_addr, increment); 1.27 + a < (char*)(1024*G); 1.28 + a += increment) { 1.29 + 1.30 +#if INCLUDE_CDS 1.31 + if (UseSharedSpaces 1.32 + && ! can_use_cds_with_metaspace_addr(a, cds_base)) { 1.33 + // We failed to find an aligned base that will reach. Fall 1.34 + // back to using our requested addr. 1.35 + metaspace_rs = ReservedSpace(compressed_class_space_size(), 1.36 + _reserve_alignment, 1.37 + large_pages, 1.38 + requested_addr); 1.39 + break; 1.40 + } 1.41 +#endif 1.42 + 1.43 + metaspace_rs = ReservedSpace(compressed_class_space_size(), 1.44 + _reserve_alignment, 1.45 + large_pages, 1.46 + a); 1.47 + if (metaspace_rs.is_reserved()) 1.48 + break; 1.49 + } 1.50 + } 1.51 + 1.52 +#endif // MIPS64 1.53 + 1.54 if (!metaspace_rs.is_reserved()) { 1.55 #if INCLUDE_CDS 1.56 if (UseSharedSpaces) {