1002 }
1003
1004 // Populate the shared space.
1005
1006 class VM_PopulateDumpSharedSpace: public VM_Operation {
1007 private:
1008 GrowableArray<MemRegion> *_closed_archive_heap_regions;
1009 GrowableArray<MemRegion> *_open_archive_heap_regions;
1010
1011 void dump_java_heap_objects() NOT_CDS_JAVA_HEAP_RETURN;
1012 void dump_symbols();
1013 char* dump_read_only_tables();
1014 void print_region_stats();
1015 void print_heap_region_stats(GrowableArray<MemRegion> *heap_mem,
1016 const char *name, const size_t total_size);
1017 public:
1018
1019 VMOp_Type type() const { return VMOp_PopulateDumpSharedSpace; }
1020 void doit(); // outline because gdb sucks
1021 static void write_region(FileMapInfo* mapinfo, int region, DumpRegion* space, bool read_only, bool allow_exec);
1022 }; // class VM_PopulateDumpSharedSpace
1023
1024 class SortedSymbolClosure: public SymbolClosure {
1025 GrowableArray<Symbol*> _symbols;
1026 virtual void do_symbol(Symbol** sym) {
1027 assert((*sym)->is_permanent(), "archived symbols must be permanent");
1028 _symbols.append(*sym);
1029 }
1030 static int compare_symbols_by_address(Symbol** a, Symbol** b) {
1031 if (a[0] < b[0]) {
1032 return -1;
1033 } else if (a[0] == b[0]) {
1034 return 0;
1035 } else {
1036 return 1;
1037 }
1038 }
1039
1040 public:
1041 SortedSymbolClosure() {
|
1002 }
1003
1004 // Populate the shared space.
1005
1006 class VM_PopulateDumpSharedSpace: public VM_Operation {
1007 private:
1008 GrowableArray<MemRegion> *_closed_archive_heap_regions;
1009 GrowableArray<MemRegion> *_open_archive_heap_regions;
1010
1011 void dump_java_heap_objects() NOT_CDS_JAVA_HEAP_RETURN;
1012 void dump_symbols();
1013 char* dump_read_only_tables();
1014 void print_region_stats();
1015 void print_heap_region_stats(GrowableArray<MemRegion> *heap_mem,
1016 const char *name, const size_t total_size);
1017 public:
1018
1019 VMOp_Type type() const { return VMOp_PopulateDumpSharedSpace; }
1020 void doit(); // outline because gdb sucks
1021 static void write_region(FileMapInfo* mapinfo, int region, DumpRegion* space, bool read_only, bool allow_exec);
1022 bool allow_nested_vm_operations() const { return true; }
1023 }; // class VM_PopulateDumpSharedSpace
1024
1025 class SortedSymbolClosure: public SymbolClosure {
1026 GrowableArray<Symbol*> _symbols;
1027 virtual void do_symbol(Symbol** sym) {
1028 assert((*sym)->is_permanent(), "archived symbols must be permanent");
1029 _symbols.append(*sym);
1030 }
1031 static int compare_symbols_by_address(Symbol** a, Symbol** b) {
1032 if (a[0] < b[0]) {
1033 return -1;
1034 } else if (a[0] == b[0]) {
1035 return 0;
1036 } else {
1037 return 1;
1038 }
1039 }
1040
1041 public:
1042 SortedSymbolClosure() {
|