1938 // with narrow class pointers.
1939 // We reserve the whole range spanning both spaces, then split that range up.
1940
1941 const size_t class_space_alignment = Metaspace::reserve_alignment();
1942
1943 // When running with class space, requested archive base must satisfy both cds core alignment
1944 // and class space alignment.
1945 const size_t base_address_alignment = MAX2(class_space_alignment, archive_space_alignment);
1946 assert(is_aligned(base_address, base_address_alignment),
1947 "Archive base address unaligned: " PTR_FORMAT ", needs alignment: %zu.",
1948 p2i(base_address), base_address_alignment);
1949
1950 size_t class_space_size = CompressedClassSpaceSize;
1951 assert(CompressedClassSpaceSize > 0 &&
1952 is_aligned(CompressedClassSpaceSize, class_space_alignment),
1953 "CompressedClassSpaceSize malformed: %zu", CompressedClassSpaceSize);
1954
1955 const size_t ccs_begin_offset = align_up(archive_space_size, class_space_alignment);
1956 const size_t gap_size = ccs_begin_offset - archive_space_size;
1957
1958 // Reduce class space size if it would not fit into the Klass encoding range
1959 constexpr size_t max_encoding_range_size = 4 * G;
1960 guarantee(archive_space_size < max_encoding_range_size - class_space_alignment, "Archive too large");
1961 if ((archive_space_size + gap_size + class_space_size) > max_encoding_range_size) {
1962 class_space_size = align_down(max_encoding_range_size - archive_space_size - gap_size, class_space_alignment);
1963 log_info(metaspace)("CDS initialization: reducing class space size from %zu to %zu",
1964 CompressedClassSpaceSize, class_space_size);
1965 FLAG_SET_ERGO(CompressedClassSpaceSize, class_space_size);
1966 }
1967
1968 const size_t total_range_size =
1969 archive_space_size + gap_size + class_space_size;
1970
1971 // Test that class space base address plus shift can be decoded by aarch64, when restored.
1972 const int precomputed_narrow_klass_shift = ArchiveBuilder::precomputed_narrow_klass_shift();
1973 if (!CompressedKlassPointers::check_klass_decode_mode(base_address, precomputed_narrow_klass_shift,
1974 total_range_size)) {
1975 aot_log_info(aot)("CDS initialization: Cannot use SharedBaseAddress " PTR_FORMAT " with precomputed shift %d.",
1976 p2i(base_address), precomputed_narrow_klass_shift);
1977 use_archive_base_addr = false;
1978 }
1979
|
1938 // with narrow class pointers.
1939 // We reserve the whole range spanning both spaces, then split that range up.
1940
1941 const size_t class_space_alignment = Metaspace::reserve_alignment();
1942
1943 // When running with class space, requested archive base must satisfy both cds core alignment
1944 // and class space alignment.
1945 const size_t base_address_alignment = MAX2(class_space_alignment, archive_space_alignment);
1946 assert(is_aligned(base_address, base_address_alignment),
1947 "Archive base address unaligned: " PTR_FORMAT ", needs alignment: %zu.",
1948 p2i(base_address), base_address_alignment);
1949
1950 size_t class_space_size = CompressedClassSpaceSize;
1951 assert(CompressedClassSpaceSize > 0 &&
1952 is_aligned(CompressedClassSpaceSize, class_space_alignment),
1953 "CompressedClassSpaceSize malformed: %zu", CompressedClassSpaceSize);
1954
1955 const size_t ccs_begin_offset = align_up(archive_space_size, class_space_alignment);
1956 const size_t gap_size = ccs_begin_offset - archive_space_size;
1957
1958 // Reduce class space size if it would not fit into the maximum possible Klass encoding range. That
1959 // range is defined by the narrowKlass size.
1960 const size_t max_encoding_range_size = CompressedKlassPointers::max_klass_range_size();
1961 guarantee(archive_space_size < max_encoding_range_size - class_space_alignment, "Archive too large");
1962 if ((archive_space_size + gap_size + class_space_size) > max_encoding_range_size) {
1963 class_space_size = align_down(max_encoding_range_size - archive_space_size - gap_size, class_space_alignment);
1964 log_info(metaspace)("CDS initialization: reducing class space size from %zu to %zu",
1965 CompressedClassSpaceSize, class_space_size);
1966 FLAG_SET_ERGO(CompressedClassSpaceSize, class_space_size);
1967 }
1968
1969 const size_t total_range_size =
1970 archive_space_size + gap_size + class_space_size;
1971
1972 // Test that class space base address plus shift can be decoded by aarch64, when restored.
1973 const int precomputed_narrow_klass_shift = ArchiveBuilder::precomputed_narrow_klass_shift();
1974 if (!CompressedKlassPointers::check_klass_decode_mode(base_address, precomputed_narrow_klass_shift,
1975 total_range_size)) {
1976 aot_log_info(aot)("CDS initialization: Cannot use SharedBaseAddress " PTR_FORMAT " with precomputed shift %d.",
1977 p2i(base_address), precomputed_narrow_klass_shift);
1978 use_archive_base_addr = false;
1979 }
1980
|