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
|