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 |