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 |