1735 // aot-initialize classes that are "safe".
1736 //
1737 // TODO: we need an automatic tool that checks the safety of aot-initialized
1738 // classes (when we extend the set of aot-initialized classes beyond JEP 483)
1739 return;
1740 } else {
1741 // In this case, the special subgraph should contain a few specific types
1742 GrowableArray<Klass*>* klasses = _dump_time_special_subgraph->subgraph_object_klasses();
1743 int num = klasses->length();
1744 for (int i = 0; i < num; i++) {
1745 Klass* subgraph_k = klasses->at(i);
1746 Symbol* name = subgraph_k->name();
1747 if (subgraph_k->is_instance_klass() &&
1748 name != vmSymbols::java_lang_Class() &&
1749 name != vmSymbols::java_lang_String() &&
1750 name != vmSymbols::java_lang_ArithmeticException() &&
1751 name != vmSymbols::java_lang_ArrayIndexOutOfBoundsException() &&
1752 name != vmSymbols::java_lang_ArrayStoreException() &&
1753 name != vmSymbols::java_lang_ClassCastException() &&
1754 name != vmSymbols::java_lang_InternalError() &&
1755 name != vmSymbols::java_lang_NullPointerException()) {
1756 ResourceMark rm;
1757 fatal("special subgraph cannot have objects of type %s", subgraph_k->external_name());
1758 }
1759 }
1760 }
1761 }
1762
1763 HeapShared::SeenObjectsTable* HeapShared::_seen_objects_table = nullptr;
1764 HeapShared::PendingOop HeapShared::_object_being_archived;
1765 int HeapShared::_num_new_walked_objs;
1766 int HeapShared::_num_new_archived_objs;
1767 int HeapShared::_num_old_recorded_klasses;
1768
1769 int HeapShared::_num_total_subgraph_recordings = 0;
1770 int HeapShared::_num_total_walked_objs = 0;
1771 int HeapShared::_num_total_archived_objs = 0;
1772 int HeapShared::_num_total_recorded_klasses = 0;
1773 int HeapShared::_num_total_verifications = 0;
1774
1775 bool HeapShared::has_been_seen_during_subgraph_recording(oop obj) {
|
1735 // aot-initialize classes that are "safe".
1736 //
1737 // TODO: we need an automatic tool that checks the safety of aot-initialized
1738 // classes (when we extend the set of aot-initialized classes beyond JEP 483)
1739 return;
1740 } else {
1741 // In this case, the special subgraph should contain a few specific types
1742 GrowableArray<Klass*>* klasses = _dump_time_special_subgraph->subgraph_object_klasses();
1743 int num = klasses->length();
1744 for (int i = 0; i < num; i++) {
1745 Klass* subgraph_k = klasses->at(i);
1746 Symbol* name = subgraph_k->name();
1747 if (subgraph_k->is_instance_klass() &&
1748 name != vmSymbols::java_lang_Class() &&
1749 name != vmSymbols::java_lang_String() &&
1750 name != vmSymbols::java_lang_ArithmeticException() &&
1751 name != vmSymbols::java_lang_ArrayIndexOutOfBoundsException() &&
1752 name != vmSymbols::java_lang_ArrayStoreException() &&
1753 name != vmSymbols::java_lang_ClassCastException() &&
1754 name != vmSymbols::java_lang_InternalError() &&
1755 name != vmSymbols::java_lang_NullPointerException() &&
1756 name != vmSymbols::jdk_internal_vm_PreemptedException()) {
1757 ResourceMark rm;
1758 fatal("special subgraph cannot have objects of type %s", subgraph_k->external_name());
1759 }
1760 }
1761 }
1762 }
1763
1764 HeapShared::SeenObjectsTable* HeapShared::_seen_objects_table = nullptr;
1765 HeapShared::PendingOop HeapShared::_object_being_archived;
1766 int HeapShared::_num_new_walked_objs;
1767 int HeapShared::_num_new_archived_objs;
1768 int HeapShared::_num_old_recorded_klasses;
1769
1770 int HeapShared::_num_total_subgraph_recordings = 0;
1771 int HeapShared::_num_total_walked_objs = 0;
1772 int HeapShared::_num_total_archived_objs = 0;
1773 int HeapShared::_num_total_recorded_klasses = 0;
1774 int HeapShared::_num_total_verifications = 0;
1775
1776 bool HeapShared::has_been_seen_during_subgraph_recording(oop obj) {
|