1753 // aot-initialize classes that are "safe".
1754 //
1755 // TODO: we need an automatic tool that checks the safety of aot-initialized
1756 // classes (when we extend the set of aot-initialized classes beyond JEP 483)
1757 return;
1758 } else {
1759 // In this case, the special subgraph should contain a few specific types
1760 GrowableArray<Klass*>* klasses = _dump_time_special_subgraph->subgraph_object_klasses();
1761 int num = klasses->length();
1762 for (int i = 0; i < num; i++) {
1763 Klass* subgraph_k = klasses->at(i);
1764 Symbol* name = subgraph_k->name();
1765 if (subgraph_k->is_instance_klass() &&
1766 name != vmSymbols::java_lang_Class() &&
1767 name != vmSymbols::java_lang_String() &&
1768 name != vmSymbols::java_lang_ArithmeticException() &&
1769 name != vmSymbols::java_lang_ArrayIndexOutOfBoundsException() &&
1770 name != vmSymbols::java_lang_ArrayStoreException() &&
1771 name != vmSymbols::java_lang_ClassCastException() &&
1772 name != vmSymbols::java_lang_InternalError() &&
1773 name != vmSymbols::java_lang_NullPointerException()) {
1774 ResourceMark rm;
1775 fatal("special subgraph cannot have objects of type %s", subgraph_k->external_name());
1776 }
1777 }
1778 }
1779 }
1780
1781 HeapShared::SeenObjectsTable* HeapShared::_seen_objects_table = nullptr;
1782 HeapShared::PendingOop HeapShared::_object_being_archived;
1783 int HeapShared::_num_new_walked_objs;
1784 int HeapShared::_num_new_archived_objs;
1785 int HeapShared::_num_old_recorded_klasses;
1786
1787 int HeapShared::_num_total_subgraph_recordings = 0;
1788 int HeapShared::_num_total_walked_objs = 0;
1789 int HeapShared::_num_total_archived_objs = 0;
1790 int HeapShared::_num_total_recorded_klasses = 0;
1791 int HeapShared::_num_total_verifications = 0;
1792
1793 bool HeapShared::has_been_seen_during_subgraph_recording(oop obj) {
|
1753 // aot-initialize classes that are "safe".
1754 //
1755 // TODO: we need an automatic tool that checks the safety of aot-initialized
1756 // classes (when we extend the set of aot-initialized classes beyond JEP 483)
1757 return;
1758 } else {
1759 // In this case, the special subgraph should contain a few specific types
1760 GrowableArray<Klass*>* klasses = _dump_time_special_subgraph->subgraph_object_klasses();
1761 int num = klasses->length();
1762 for (int i = 0; i < num; i++) {
1763 Klass* subgraph_k = klasses->at(i);
1764 Symbol* name = subgraph_k->name();
1765 if (subgraph_k->is_instance_klass() &&
1766 name != vmSymbols::java_lang_Class() &&
1767 name != vmSymbols::java_lang_String() &&
1768 name != vmSymbols::java_lang_ArithmeticException() &&
1769 name != vmSymbols::java_lang_ArrayIndexOutOfBoundsException() &&
1770 name != vmSymbols::java_lang_ArrayStoreException() &&
1771 name != vmSymbols::java_lang_ClassCastException() &&
1772 name != vmSymbols::java_lang_InternalError() &&
1773 name != vmSymbols::java_lang_NullPointerException() &&
1774 name != vmSymbols::jdk_internal_vm_PreemptedException()) {
1775 ResourceMark rm;
1776 fatal("special subgraph cannot have objects of type %s", subgraph_k->external_name());
1777 }
1778 }
1779 }
1780 }
1781
1782 HeapShared::SeenObjectsTable* HeapShared::_seen_objects_table = nullptr;
1783 HeapShared::PendingOop HeapShared::_object_being_archived;
1784 int HeapShared::_num_new_walked_objs;
1785 int HeapShared::_num_new_archived_objs;
1786 int HeapShared::_num_old_recorded_klasses;
1787
1788 int HeapShared::_num_total_subgraph_recordings = 0;
1789 int HeapShared::_num_total_walked_objs = 0;
1790 int HeapShared::_num_total_archived_objs = 0;
1791 int HeapShared::_num_total_recorded_klasses = 0;
1792 int HeapShared::_num_total_verifications = 0;
1793
1794 bool HeapShared::has_been_seen_during_subgraph_recording(oop obj) {
|