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