hotspot/src/share/vm/memory/metaspace.cpp
changeset 29180 50369728b00e
parent 27404 33c0f343cd5c
child 29181 89beae49867c
equal deleted inserted replaced
27647:4dcb647196fd 29180:50369728b00e
  3018   assert_is_size_aligned(compressed_class_space_size(), _reserve_alignment);
  3018   assert_is_size_aligned(compressed_class_space_size(), _reserve_alignment);
  3019 
  3019 
  3020   // Don't use large pages for the class space.
  3020   // Don't use large pages for the class space.
  3021   bool large_pages = false;
  3021   bool large_pages = false;
  3022 
  3022 
       
  3023 #ifndef AARCH64
  3023   ReservedSpace metaspace_rs = ReservedSpace(compressed_class_space_size(),
  3024   ReservedSpace metaspace_rs = ReservedSpace(compressed_class_space_size(),
  3024                                              _reserve_alignment,
  3025                                              _reserve_alignment,
  3025                                              large_pages,
  3026                                              large_pages,
  3026                                              requested_addr, 0);
  3027                                              requested_addr, 0);
       
  3028 #else // AARCH64
       
  3029   ReservedSpace metaspace_rs;
       
  3030 
       
  3031   // Our compressed klass pointers may fit nicely into the lower 32
       
  3032   // bits.
       
  3033   if ((uint64_t)requested_addr + compressed_class_space_size() < 4*G) {
       
  3034     metaspace_rs = ReservedSpace(compressed_class_space_size(),
       
  3035                                              _reserve_alignment,
       
  3036                                              large_pages,
       
  3037                                              requested_addr, 0);
       
  3038   }
       
  3039 
       
  3040   if (! metaspace_rs.is_reserved()) {
       
  3041     // Try to align metaspace so that we can decode a compressed klass
       
  3042     // with a single MOVK instruction.  We can do this iff the
       
  3043     // compressed class base is a multiple of 4G.
       
  3044     for (char *a = (char*)align_ptr_up(requested_addr, 4*G);
       
  3045          a < (char*)(1024*G);
       
  3046          a += 4*G) {
       
  3047 
       
  3048 #if INCLUDE_CDS
       
  3049       if (UseSharedSpaces
       
  3050           && ! can_use_cds_with_metaspace_addr(a, cds_base)) {
       
  3051         // We failed to find an aligned base that will reach.  Fall
       
  3052         // back to using our requested addr.
       
  3053         metaspace_rs = ReservedSpace(compressed_class_space_size(),
       
  3054                                      _reserve_alignment,
       
  3055                                      large_pages,
       
  3056                                      requested_addr, 0);
       
  3057         break;
       
  3058       }
       
  3059 #endif
       
  3060 
       
  3061       metaspace_rs = ReservedSpace(compressed_class_space_size(),
       
  3062                                    _reserve_alignment,
       
  3063                                    large_pages,
       
  3064                                    a, 0);
       
  3065       if (metaspace_rs.is_reserved())
       
  3066         break;
       
  3067     }
       
  3068   }
       
  3069 
       
  3070 #endif // AARCH64
       
  3071 
  3027   if (!metaspace_rs.is_reserved()) {
  3072   if (!metaspace_rs.is_reserved()) {
  3028 #if INCLUDE_CDS
  3073 #if INCLUDE_CDS
  3029     if (UseSharedSpaces) {
  3074     if (UseSharedSpaces) {
  3030       size_t increment = align_size_up(1*G, _reserve_alignment);
  3075       size_t increment = align_size_up(1*G, _reserve_alignment);
  3031 
  3076