412 clear_row(row);
413 }
414 }
415 }
416
417 #if INCLUDE_JVMCI
418 void VirtualCallData::clean_weak_klass_links(bool always_clean) {
419 ReceiverTypeData::clean_weak_klass_links(always_clean);
420 for (uint row = 0; row < method_row_limit(); row++) {
421 Method* p = method(row);
422 if (p != NULL && (always_clean || !p->method_holder()->is_loader_alive())) {
423 clear_method_row(row);
424 }
425 }
426 }
427
428 void VirtualCallData::clean_weak_method_links() {
429 ReceiverTypeData::clean_weak_method_links();
430 for (uint row = 0; row < method_row_limit(); row++) {
431 Method* p = method(row);
432 if (p != NULL && !p->on_stack()) {
433 clear_method_row(row);
434 }
435 }
436 }
437 #endif // INCLUDE_JVMCI
438
439 void ReceiverTypeData::print_receiver_data_on(outputStream* st) const {
440 uint row;
441 int entries = 0;
442 for (row = 0; row < row_limit(); row++) {
443 if (receiver(row) != NULL) entries++;
444 }
445 #if INCLUDE_JVMCI
446 st->print_cr("count(%u) nonprofiled_count(%u) entries(%u)", count(), nonprofiled_count(), entries);
447 #else
448 st->print_cr("count(%u) entries(%u)", count(), entries);
449 #endif
450 int total = count();
451 for (row = 0; row < row_limit(); row++) {
452 if (receiver(row) != NULL) {
1753 #endif
1754 }
1755
1756 void MethodData::clean_method_data(bool always_clean) {
1757 ResourceMark rm;
1758 for (ProfileData* data = first_data();
1759 is_valid(data);
1760 data = next_data(data)) {
1761 data->clean_weak_klass_links(always_clean);
1762 }
1763 ParametersTypeData* parameters = parameters_type_data();
1764 if (parameters != NULL) {
1765 parameters->clean_weak_klass_links(always_clean);
1766 }
1767
1768 CleanExtraDataKlassClosure cl(always_clean);
1769 clean_extra_data(&cl);
1770 verify_extra_data_clean(&cl);
1771 }
1772
1773 void MethodData::clean_weak_method_links() {
1774 ResourceMark rm;
1775 for (ProfileData* data = first_data();
1776 is_valid(data);
1777 data = next_data(data)) {
1778 data->clean_weak_method_links();
1779 }
1780
1781 CleanExtraDataMethodClosure cl;
1782 clean_extra_data(&cl);
1783 verify_extra_data_clean(&cl);
1784 }
1785
1786 #ifdef ASSERT
1787 void MethodData::verify_clean_weak_method_links() {
1788 ResourceMark rm;
1789 for (ProfileData* data = first_data();
1790 is_valid(data);
1791 data = next_data(data)) {
1792 data->verify_clean_weak_method_links();
|
412 clear_row(row);
413 }
414 }
415 }
416
417 #if INCLUDE_JVMCI
418 void VirtualCallData::clean_weak_klass_links(bool always_clean) {
419 ReceiverTypeData::clean_weak_klass_links(always_clean);
420 for (uint row = 0; row < method_row_limit(); row++) {
421 Method* p = method(row);
422 if (p != NULL && (always_clean || !p->method_holder()->is_loader_alive())) {
423 clear_method_row(row);
424 }
425 }
426 }
427
428 void VirtualCallData::clean_weak_method_links() {
429 ReceiverTypeData::clean_weak_method_links();
430 for (uint row = 0; row < method_row_limit(); row++) {
431 Method* p = method(row);
432 if (p != NULL && p->is_old()) {
433 clear_method_row(row);
434 }
435 }
436 }
437 #endif // INCLUDE_JVMCI
438
439 void ReceiverTypeData::print_receiver_data_on(outputStream* st) const {
440 uint row;
441 int entries = 0;
442 for (row = 0; row < row_limit(); row++) {
443 if (receiver(row) != NULL) entries++;
444 }
445 #if INCLUDE_JVMCI
446 st->print_cr("count(%u) nonprofiled_count(%u) entries(%u)", count(), nonprofiled_count(), entries);
447 #else
448 st->print_cr("count(%u) entries(%u)", count(), entries);
449 #endif
450 int total = count();
451 for (row = 0; row < row_limit(); row++) {
452 if (receiver(row) != NULL) {
1753 #endif
1754 }
1755
1756 void MethodData::clean_method_data(bool always_clean) {
1757 ResourceMark rm;
1758 for (ProfileData* data = first_data();
1759 is_valid(data);
1760 data = next_data(data)) {
1761 data->clean_weak_klass_links(always_clean);
1762 }
1763 ParametersTypeData* parameters = parameters_type_data();
1764 if (parameters != NULL) {
1765 parameters->clean_weak_klass_links(always_clean);
1766 }
1767
1768 CleanExtraDataKlassClosure cl(always_clean);
1769 clean_extra_data(&cl);
1770 verify_extra_data_clean(&cl);
1771 }
1772
1773 // This is called during redefinition to clean all "old" redefined
1774 // methods out of MethodData for all methods.
1775 void MethodData::clean_weak_method_links() {
1776 ResourceMark rm;
1777 for (ProfileData* data = first_data();
1778 is_valid(data);
1779 data = next_data(data)) {
1780 data->clean_weak_method_links();
1781 }
1782
1783 CleanExtraDataMethodClosure cl;
1784 clean_extra_data(&cl);
1785 verify_extra_data_clean(&cl);
1786 }
1787
1788 #ifdef ASSERT
1789 void MethodData::verify_clean_weak_method_links() {
1790 ResourceMark rm;
1791 for (ProfileData* data = first_data();
1792 is_valid(data);
1793 data = next_data(data)) {
1794 data->verify_clean_weak_method_links();
|