< prev index next >

src/hotspot/share/cds/aotMetaspace.hpp

Print this page

 32 #include "oops/oop.hpp"
 33 #include "utilities/macros.hpp"
 34 
 35 class ArchiveBuilder;
 36 class ArchiveMappedHeapInfo;
 37 class ArchiveStreamedHeapInfo;
 38 class FileMapInfo;
 39 class Method;
 40 class outputStream;
 41 class SerializeClosure;
 42 class StaticArchiveBuilder;
 43 
 44 template<class E> class Array;
 45 
 46 enum MapArchiveResult {
 47   MAP_ARCHIVE_SUCCESS,
 48   MAP_ARCHIVE_MMAP_FAILURE,
 49   MAP_ARCHIVE_OTHER_FAILURE
 50 };
 51 


 52 // Class Data Sharing Support
 53 class AOTMetaspace : AllStatic {
 54   static ReservedSpace _symbol_rs;  // used only during -Xshare:dump
 55   static VirtualSpace _symbol_vs;   // used only during -Xshare:dump
 56   static bool _archive_loading_failed;
 57   static bool _remapped_readwrite;
 58   static void* _aot_metaspace_static_top;
 59   static intx _relocation_delta;
 60   static char* _requested_base_address;
 61   static bool _use_optimized_module_handling;
 62   static Array<Method*>* _archived_method_handle_intrinsics;
 63   static int volatile _preimage_static_archive_dumped;
 64   static FileMapInfo* _output_mapinfo;
 65 
 66  public:
 67   enum {
 68     // core archive spaces
 69     rw = 0,  // read-write
 70     ro = 1,  // read-only
 71     bm = 2,  // relocation bitmaps (freed after file mapping is finished)

 74     num_core_region = 2,       // rw and ro
 75     n_regions = 5              // total number of regions
 76   };
 77 
 78   static void dump_static_archive(TRAPS) NOT_CDS_RETURN;
 79 #ifdef _LP64
 80   static void adjust_heap_sizes_for_dumping() NOT_CDS_JAVA_HEAP_RETURN;
 81 #endif
 82 
 83 private:
 84   static void exercise_runtime_cds_code(TRAPS) NOT_CDS_RETURN;
 85   static void dump_static_archive_impl(StaticArchiveBuilder& builder, TRAPS) NOT_CDS_RETURN;
 86   static void load_classes(TRAPS) NOT_CDS_RETURN;
 87 
 88 public:
 89   static Symbol* symbol_rs_base() {
 90     return (Symbol*)_symbol_rs.base();
 91   }
 92 
 93   static void initialize_for_static_dump() NOT_CDS_RETURN;

 94   static void initialize_runtime_shared_and_meta_spaces() NOT_CDS_RETURN;
 95   static void post_initialize(TRAPS) NOT_CDS_RETURN;
 96 
 97   static void print_on(outputStream* st);
 98 
 99   static void set_archive_loading_failed() {
100     _archive_loading_failed = true;
101   }
102 
103   static void initialize_shared_spaces() NOT_CDS_RETURN;
104 
105   // Return true if given address is in the shared metaspace regions (i.e., excluding the
106   // mapped heap region.)
107   static bool in_aot_cache(const void* p) {
108     return MetaspaceObj::in_aot_cache((const MetaspaceObj*)p);
109   }
110 
111   static void set_aot_metaspace_range(void* base, void *static_top, void* top) NOT_CDS_RETURN;
112 
113   // inside the metaspace of the AOT cache, or the static CDS archive

177   static intx relocation_delta() { return _relocation_delta; }
178 
179   static bool use_windows_memory_mapping() {
180     const bool is_windows = (NOT_WINDOWS(false) WINDOWS_ONLY(true));
181     //const bool is_windows = true; // enable this to allow testing the windows mmap semantics on Linux, etc.
182     return is_windows;
183   }
184 
185   // Can we skip some expensive operations related to modules?
186   static bool use_optimized_module_handling() { return NOT_CDS(false) CDS_ONLY(_use_optimized_module_handling); }
187   static void disable_optimized_module_handling() { _use_optimized_module_handling = false; }
188 
189 private:
190   static void read_extra_data(JavaThread* current, const char* filename) NOT_CDS_RETURN;
191   static void fork_and_dump_final_static_archive(TRAPS);
192   static void open_output_mapinfo();
193   static bool write_static_archive(ArchiveBuilder* builder,
194                                    FileMapInfo* map_info,
195                                    ArchiveMappedHeapInfo* mapped_heap_info,
196                                    ArchiveStreamedHeapInfo* streamed_heap_info);
197   static FileMapInfo* open_static_archive();
198   static FileMapInfo* open_dynamic_archive();
199   // use_requested_addr: If true (default), attempt to map at the address the
200   static MapArchiveResult map_archives(FileMapInfo* static_mapinfo, FileMapInfo* dynamic_mapinfo,
201                                        bool use_requested_addr);
202   static char* reserve_address_space_for_archives(FileMapInfo* static_mapinfo,
203                                                   FileMapInfo* dynamic_mapinfo,
204                                                   bool use_archive_base_addr,
205                                                   ReservedSpace& total_space_rs,
206                                                   ReservedSpace& archive_space_rs,
207                                                   ReservedSpace& class_space_rs);
208  static void release_reserved_spaces(ReservedSpace& total_space_rs,
209                                      ReservedSpace& archive_space_rs,
210                                      ReservedSpace& class_space_rs);
211   static MapArchiveResult map_archive(FileMapInfo* mapinfo, char* mapped_base_address, ReservedSpace rs);
212   static void unmap_archive(FileMapInfo* mapinfo);
213   static void get_default_classlist(char* default_classlist, const size_t buf_size);
214 };
215 #endif // SHARE_CDS_AOTMETASPACE_HPP

 32 #include "oops/oop.hpp"
 33 #include "utilities/macros.hpp"
 34 
 35 class ArchiveBuilder;
 36 class ArchiveMappedHeapInfo;
 37 class ArchiveStreamedHeapInfo;
 38 class FileMapInfo;
 39 class Method;
 40 class outputStream;
 41 class SerializeClosure;
 42 class StaticArchiveBuilder;
 43 
 44 template<class E> class Array;
 45 
 46 enum MapArchiveResult {
 47   MAP_ARCHIVE_SUCCESS,
 48   MAP_ARCHIVE_MMAP_FAILURE,
 49   MAP_ARCHIVE_OTHER_FAILURE
 50 };
 51 
 52 class StaticArchiveBuilder;
 53 
 54 // Class Data Sharing Support
 55 class AOTMetaspace : AllStatic {
 56   static ReservedSpace _symbol_rs;  // used only during -Xshare:dump
 57   static VirtualSpace _symbol_vs;   // used only during -Xshare:dump
 58   static bool _archive_loading_failed;
 59   static bool _remapped_readwrite;
 60   static void* _aot_metaspace_static_top;
 61   static intx _relocation_delta;
 62   static char* _requested_base_address;
 63   static bool _use_optimized_module_handling;
 64   static Array<Method*>* _archived_method_handle_intrinsics;
 65   static int volatile _preimage_static_archive_dumped;
 66   static FileMapInfo* _output_mapinfo;
 67 
 68  public:
 69   enum {
 70     // core archive spaces
 71     rw = 0,  // read-write
 72     ro = 1,  // read-only
 73     bm = 2,  // relocation bitmaps (freed after file mapping is finished)

 76     num_core_region = 2,       // rw and ro
 77     n_regions = 5              // total number of regions
 78   };
 79 
 80   static void dump_static_archive(TRAPS) NOT_CDS_RETURN;
 81 #ifdef _LP64
 82   static void adjust_heap_sizes_for_dumping() NOT_CDS_JAVA_HEAP_RETURN;
 83 #endif
 84 
 85 private:
 86   static void exercise_runtime_cds_code(TRAPS) NOT_CDS_RETURN;
 87   static void dump_static_archive_impl(StaticArchiveBuilder& builder, TRAPS) NOT_CDS_RETURN;
 88   static void load_classes(TRAPS) NOT_CDS_RETURN;
 89 
 90 public:
 91   static Symbol* symbol_rs_base() {
 92     return (Symbol*)_symbol_rs.base();
 93   }
 94 
 95   static void initialize_for_static_dump() NOT_CDS_RETURN;
 96   static void open_static_archive() NOT_CDS_RETURN;
 97   static void initialize_runtime_shared_and_meta_spaces() NOT_CDS_RETURN;
 98   static void post_initialize(TRAPS) NOT_CDS_RETURN;
 99 
100   static void print_on(outputStream* st);
101 
102   static void set_archive_loading_failed() {
103     _archive_loading_failed = true;
104   }
105 
106   static void initialize_shared_spaces() NOT_CDS_RETURN;
107 
108   // Return true if given address is in the shared metaspace regions (i.e., excluding the
109   // mapped heap region.)
110   static bool in_aot_cache(const void* p) {
111     return MetaspaceObj::in_aot_cache((const MetaspaceObj*)p);
112   }
113 
114   static void set_aot_metaspace_range(void* base, void *static_top, void* top) NOT_CDS_RETURN;
115 
116   // inside the metaspace of the AOT cache, or the static CDS archive

180   static intx relocation_delta() { return _relocation_delta; }
181 
182   static bool use_windows_memory_mapping() {
183     const bool is_windows = (NOT_WINDOWS(false) WINDOWS_ONLY(true));
184     //const bool is_windows = true; // enable this to allow testing the windows mmap semantics on Linux, etc.
185     return is_windows;
186   }
187 
188   // Can we skip some expensive operations related to modules?
189   static bool use_optimized_module_handling() { return NOT_CDS(false) CDS_ONLY(_use_optimized_module_handling); }
190   static void disable_optimized_module_handling() { _use_optimized_module_handling = false; }
191 
192 private:
193   static void read_extra_data(JavaThread* current, const char* filename) NOT_CDS_RETURN;
194   static void fork_and_dump_final_static_archive(TRAPS);
195   static void open_output_mapinfo();
196   static bool write_static_archive(ArchiveBuilder* builder,
197                                    FileMapInfo* map_info,
198                                    ArchiveMappedHeapInfo* mapped_heap_info,
199                                    ArchiveStreamedHeapInfo* streamed_heap_info);

200   static FileMapInfo* open_dynamic_archive();
201   // use_requested_addr: If true (default), attempt to map at the address the
202   static MapArchiveResult map_archives(FileMapInfo* static_mapinfo, FileMapInfo* dynamic_mapinfo,
203                                        bool use_requested_addr);
204   static char* reserve_address_space_for_archives(FileMapInfo* static_mapinfo,
205                                                   FileMapInfo* dynamic_mapinfo,
206                                                   bool use_archive_base_addr,
207                                                   ReservedSpace& total_space_rs,
208                                                   ReservedSpace& archive_space_rs,
209                                                   ReservedSpace& class_space_rs);
210  static void release_reserved_spaces(ReservedSpace& total_space_rs,
211                                      ReservedSpace& archive_space_rs,
212                                      ReservedSpace& class_space_rs);
213   static MapArchiveResult map_archive(FileMapInfo* mapinfo, char* mapped_base_address, ReservedSpace rs);
214   static void unmap_archive(FileMapInfo* mapinfo);
215   static void get_default_classlist(char* default_classlist, const size_t buf_size);
216 };
217 #endif // SHARE_CDS_AOTMETASPACE_HPP
< prev index next >