< prev index next >

src/hotspot/share/cds/aotMetaspace.cpp

Print this page

1955   //  with narrow class pointers.
1956   // We reserve the whole range spanning both spaces, then split that range up.
1957 
1958   const size_t class_space_alignment = Metaspace::reserve_alignment();
1959 
1960   // When running with class space, requested archive base must satisfy both cds core alignment
1961   // and class space alignment.
1962   const size_t base_address_alignment = MAX2(class_space_alignment, archive_space_alignment);
1963   assert(is_aligned(base_address, base_address_alignment),
1964            "Archive base address unaligned: " PTR_FORMAT ", needs alignment: %zu.",
1965            p2i(base_address), base_address_alignment);
1966 
1967   size_t class_space_size = CompressedClassSpaceSize;
1968   assert(CompressedClassSpaceSize > 0 &&
1969          is_aligned(CompressedClassSpaceSize, class_space_alignment),
1970          "CompressedClassSpaceSize malformed: %zu", CompressedClassSpaceSize);
1971 
1972   const size_t ccs_begin_offset = align_up(archive_space_size, class_space_alignment);
1973   const size_t gap_size = ccs_begin_offset - archive_space_size;
1974 
1975   // Reduce class space size if it would not fit into the Klass encoding range
1976   constexpr size_t max_encoding_range_size = 4 * G;

1977   guarantee(archive_space_size < max_encoding_range_size - class_space_alignment, "Archive too large");
1978   if ((archive_space_size + gap_size + class_space_size) > max_encoding_range_size) {
1979     class_space_size = align_down(max_encoding_range_size - archive_space_size - gap_size, class_space_alignment);
1980     log_info(metaspace)("CDS initialization: reducing class space size from %zu to %zu",
1981         CompressedClassSpaceSize, class_space_size);
1982     FLAG_SET_ERGO(CompressedClassSpaceSize, class_space_size);
1983   }
1984 
1985   const size_t total_range_size =
1986       archive_space_size + gap_size + class_space_size;
1987 
1988   // Test that class space base address plus shift can be decoded by aarch64, when restored.
1989   const int precomputed_narrow_klass_shift = ArchiveBuilder::precomputed_narrow_klass_shift();
1990   if (!CompressedKlassPointers::check_klass_decode_mode(base_address, precomputed_narrow_klass_shift,
1991                                                         total_range_size)) {
1992     aot_log_info(aot)("CDS initialization: Cannot use SharedBaseAddress " PTR_FORMAT " with precomputed shift %d.",
1993                   p2i(base_address), precomputed_narrow_klass_shift);
1994     use_archive_base_addr = false;
1995   }
1996 

1955   //  with narrow class pointers.
1956   // We reserve the whole range spanning both spaces, then split that range up.
1957 
1958   const size_t class_space_alignment = Metaspace::reserve_alignment();
1959 
1960   // When running with class space, requested archive base must satisfy both cds core alignment
1961   // and class space alignment.
1962   const size_t base_address_alignment = MAX2(class_space_alignment, archive_space_alignment);
1963   assert(is_aligned(base_address, base_address_alignment),
1964            "Archive base address unaligned: " PTR_FORMAT ", needs alignment: %zu.",
1965            p2i(base_address), base_address_alignment);
1966 
1967   size_t class_space_size = CompressedClassSpaceSize;
1968   assert(CompressedClassSpaceSize > 0 &&
1969          is_aligned(CompressedClassSpaceSize, class_space_alignment),
1970          "CompressedClassSpaceSize malformed: %zu", CompressedClassSpaceSize);
1971 
1972   const size_t ccs_begin_offset = align_up(archive_space_size, class_space_alignment);
1973   const size_t gap_size = ccs_begin_offset - archive_space_size;
1974 
1975   // Reduce class space size if it would not fit into the maximum possible Klass encoding range. That
1976   // range is defined by the narrowKlass size.
1977   const size_t max_encoding_range_size = CompressedKlassPointers::max_klass_range_size();
1978   guarantee(archive_space_size < max_encoding_range_size - class_space_alignment, "Archive too large");
1979   if ((archive_space_size + gap_size + class_space_size) > max_encoding_range_size) {
1980     class_space_size = align_down(max_encoding_range_size - archive_space_size - gap_size, class_space_alignment);
1981     log_info(metaspace)("CDS initialization: reducing class space size from %zu to %zu",
1982         CompressedClassSpaceSize, class_space_size);
1983     FLAG_SET_ERGO(CompressedClassSpaceSize, class_space_size);
1984   }
1985 
1986   const size_t total_range_size =
1987       archive_space_size + gap_size + class_space_size;
1988 
1989   // Test that class space base address plus shift can be decoded by aarch64, when restored.
1990   const int precomputed_narrow_klass_shift = ArchiveBuilder::precomputed_narrow_klass_shift();
1991   if (!CompressedKlassPointers::check_klass_decode_mode(base_address, precomputed_narrow_klass_shift,
1992                                                         total_range_size)) {
1993     aot_log_info(aot)("CDS initialization: Cannot use SharedBaseAddress " PTR_FORMAT " with precomputed shift %d.",
1994                   p2i(base_address), precomputed_narrow_klass_shift);
1995     use_archive_base_addr = false;
1996   }
1997 
< prev index next >