src/share/vm/memory/metaspace.cpp

changeset 9448
73d689add964
parent 9301
d47844b56aaf
parent 9268
acf02173a790
child 9637
eef07cd490d4
     1.1 --- a/src/share/vm/memory/metaspace.cpp	Sat Oct 06 10:25:04 2018 +0100
     1.2 +++ b/src/share/vm/memory/metaspace.cpp	Thu Dec 27 11:43:33 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) {

mercurial