< prev index next >

src/hotspot/share/memory/metaspaceShared.cpp

Print this page




 697       // InstanceKlass and TypeArrayKlass will in turn call remove_unshareable_info
 698       // on their array classes.
 699       assert(k->is_instance_klass() || k->is_typeArray_klass(), "must be");
 700       k->remove_unshareable_info();
 701     }
 702   }
 703 }
 704 
 705 static void remove_java_mirror_in_classes() {
 706   for (int i = 0; i < _global_klass_objects->length(); i++) {
 707     Klass* k = _global_klass_objects->at(i);
 708     if (!k->is_objArray_klass()) {
 709       // InstanceKlass and TypeArrayKlass will in turn call remove_unshareable_info
 710       // on their array classes.
 711       assert(k->is_instance_klass() || k->is_typeArray_klass(), "must be");
 712       k->remove_java_mirror();
 713     }
 714   }
 715 }
 716 
 717 static void clear_basic_type_mirrors() {
 718   assert(!HeapShared::is_heap_object_archiving_allowed(), "Sanity");
 719   Universe::set_int_mirror(NULL);
 720   Universe::set_float_mirror(NULL);
 721   Universe::set_double_mirror(NULL);
 722   Universe::set_byte_mirror(NULL);
 723   Universe::set_bool_mirror(NULL);
 724   Universe::set_char_mirror(NULL);
 725   Universe::set_long_mirror(NULL);
 726   Universe::set_short_mirror(NULL);
 727   Universe::set_void_mirror(NULL);
 728 }
 729 
 730 static void rewrite_nofast_bytecode(const methodHandle& method) {
 731   BytecodeStream bcs(method);
 732   while (!bcs.is_last_bytecode()) {
 733     Bytecodes::Code opcode = bcs.next();
 734     switch (opcode) {
 735     case Bytecodes::_getfield:      *bcs.bcp() = Bytecodes::_nofast_getfield;      break;
 736     case Bytecodes::_putfield:      *bcs.bcp() = Bytecodes::_nofast_putfield;      break;
 737     case Bytecodes::_aload_0:       *bcs.bcp() = Bytecodes::_nofast_aload_0;       break;
 738     case Bytecodes::_iload: {
 739       if (!bcs.is_wide()) {
 740         *bcs.bcp() = Bytecodes::_nofast_iload;
 741       }
 742       break;
 743     }
 744     default: break;
 745     }
 746   }
 747 }
 748 
 749 // Walk all methods in the class list to ensure that they won't be modified at


1523     assert(klass->is_klass(), "must be");
1524     return klass;
1525   }
1526 };
1527 
1528 DumpAllocStats* ArchiveCompactor::_alloc_stats;
1529 ArchiveCompactor::RelocationTable* ArchiveCompactor::_new_loc_table;
1530 
1531 void VM_PopulateDumpSharedSpace::dump_symbols() {
1532   log_info(cds)("Dumping symbol table ...");
1533 
1534   NOT_PRODUCT(SymbolTable::verify());
1535   SymbolTable::write_to_archive();
1536 }
1537 
1538 char* VM_PopulateDumpSharedSpace::dump_read_only_tables() {
1539   ArchiveCompactor::OtherROAllocMark mark;
1540 
1541   log_info(cds)("Removing java_mirror ... ");
1542   if (!HeapShared::is_heap_object_archiving_allowed()) {
1543     clear_basic_type_mirrors();
1544   }
1545   remove_java_mirror_in_classes();
1546   log_info(cds)("done. ");
1547 
1548   SystemDictionaryShared::write_to_archive();
1549 
1550   // Write the other data to the output array.
1551   char* start = _ro_region.top();
1552   WriteClosure wc(&_ro_region);
1553   MetaspaceShared::serialize(&wc);
1554 
1555   // Write the bitmaps for patching the archive heap regions
1556   _closed_archive_heap_oopmaps = NULL;
1557   _open_archive_heap_oopmaps = NULL;
1558   dump_archive_heap_oopmaps();
1559 
1560   return start;
1561 }
1562 
1563 void VM_PopulateDumpSharedSpace::print_class_stats() {




 697       // InstanceKlass and TypeArrayKlass will in turn call remove_unshareable_info
 698       // on their array classes.
 699       assert(k->is_instance_klass() || k->is_typeArray_klass(), "must be");
 700       k->remove_unshareable_info();
 701     }
 702   }
 703 }
 704 
 705 static void remove_java_mirror_in_classes() {
 706   for (int i = 0; i < _global_klass_objects->length(); i++) {
 707     Klass* k = _global_klass_objects->at(i);
 708     if (!k->is_objArray_klass()) {
 709       // InstanceKlass and TypeArrayKlass will in turn call remove_unshareable_info
 710       // on their array classes.
 711       assert(k->is_instance_klass() || k->is_typeArray_klass(), "must be");
 712       k->remove_java_mirror();
 713     }
 714   }
 715 }
 716 













 717 static void rewrite_nofast_bytecode(const methodHandle& method) {
 718   BytecodeStream bcs(method);
 719   while (!bcs.is_last_bytecode()) {
 720     Bytecodes::Code opcode = bcs.next();
 721     switch (opcode) {
 722     case Bytecodes::_getfield:      *bcs.bcp() = Bytecodes::_nofast_getfield;      break;
 723     case Bytecodes::_putfield:      *bcs.bcp() = Bytecodes::_nofast_putfield;      break;
 724     case Bytecodes::_aload_0:       *bcs.bcp() = Bytecodes::_nofast_aload_0;       break;
 725     case Bytecodes::_iload: {
 726       if (!bcs.is_wide()) {
 727         *bcs.bcp() = Bytecodes::_nofast_iload;
 728       }
 729       break;
 730     }
 731     default: break;
 732     }
 733   }
 734 }
 735 
 736 // Walk all methods in the class list to ensure that they won't be modified at


1510     assert(klass->is_klass(), "must be");
1511     return klass;
1512   }
1513 };
1514 
1515 DumpAllocStats* ArchiveCompactor::_alloc_stats;
1516 ArchiveCompactor::RelocationTable* ArchiveCompactor::_new_loc_table;
1517 
1518 void VM_PopulateDumpSharedSpace::dump_symbols() {
1519   log_info(cds)("Dumping symbol table ...");
1520 
1521   NOT_PRODUCT(SymbolTable::verify());
1522   SymbolTable::write_to_archive();
1523 }
1524 
1525 char* VM_PopulateDumpSharedSpace::dump_read_only_tables() {
1526   ArchiveCompactor::OtherROAllocMark mark;
1527 
1528   log_info(cds)("Removing java_mirror ... ");
1529   if (!HeapShared::is_heap_object_archiving_allowed()) {
1530     Universe::clear_basic_type_mirrors();
1531   }
1532   remove_java_mirror_in_classes();
1533   log_info(cds)("done. ");
1534 
1535   SystemDictionaryShared::write_to_archive();
1536 
1537   // Write the other data to the output array.
1538   char* start = _ro_region.top();
1539   WriteClosure wc(&_ro_region);
1540   MetaspaceShared::serialize(&wc);
1541 
1542   // Write the bitmaps for patching the archive heap regions
1543   _closed_archive_heap_oopmaps = NULL;
1544   _open_archive_heap_oopmaps = NULL;
1545   dump_archive_heap_oopmaps();
1546 
1547   return start;
1548 }
1549 
1550 void VM_PopulateDumpSharedSpace::print_class_stats() {


< prev index next >