95 // %%% there can be 32-bit overflow here
96 return ((*b)->invocation_count() + (*b)->compiled_invocation_count())
97 - ((*a)->invocation_count() + (*a)->compiled_invocation_count());
98 }
99
100 void collect_profiled_methods(Method* m) {
101 Thread* thread = Thread::current();
102 methodHandle mh(thread, m);
103 if ((m->method_data() != NULL) &&
104 (PrintMethodData || CompilerOracle::should_print(mh))) {
105 collected_profiled_methods->push(m);
106 }
107 }
108
109 void print_method_profiling_data() {
110 if (ProfileInterpreter COMPILER1_PRESENT(|| C1UpdateMethodData) &&
111 (PrintMethodData || CompilerOracle::should_print_methods())) {
112 ResourceMark rm;
113 HandleMark hm;
114 collected_profiled_methods = new GrowableArray<Method*>(1024);
115 ClassLoaderDataGraph::methods_do(collect_profiled_methods);
116 collected_profiled_methods->sort(&compare_methods);
117
118 int count = collected_profiled_methods->length();
119 int total_size = 0;
120 if (count > 0) {
121 for (int index = 0; index < count; index++) {
122 Method* m = collected_profiled_methods->at(index);
123 ttyLocker ttyl;
124 tty->print_cr("------------------------------------------------------------------------");
125 m->print_invocation_count();
126 tty->print_cr(" mdo size: %d bytes", m->method_data()->size_in_bytes());
127 tty->cr();
128 // Dump data on parameters if any
129 if (m->method_data() != NULL && m->method_data()->parameters_type_data() != NULL) {
130 tty->fill_to(2);
131 m->method_data()->parameters_type_data()->print_data_on(tty);
132 }
133 m->print_codes();
134 total_size += m->method_data()->size_in_bytes();
135 }
146
147 GrowableArray<Method*>* collected_invoked_methods;
148
149 void collect_invoked_methods(Method* m) {
150 if (m->invocation_count() + m->compiled_invocation_count() >= 1 ) {
151 collected_invoked_methods->push(m);
152 }
153 }
154
155
156
157
158 void print_method_invocation_histogram() {
159 ResourceMark rm;
160 HandleMark hm;
161 collected_invoked_methods = new GrowableArray<Method*>(1024);
162 SystemDictionary::methods_do(collect_invoked_methods);
163 collected_invoked_methods->sort(&compare_methods);
164 //
165 tty->cr();
166 tty->print_cr("Histogram Over MethodOop Invocation Counters (cutoff = " INTX_FORMAT "):", MethodHistogramCutoff);
167 tty->cr();
168 tty->print_cr("____Count_(I+C)____Method________________________Module_________________");
169 unsigned total = 0, int_total = 0, comp_total = 0, static_total = 0, final_total = 0,
170 synch_total = 0, nativ_total = 0, acces_total = 0;
171 for (int index = 0; index < collected_invoked_methods->length(); index++) {
172 Method* m = collected_invoked_methods->at(index);
173 int c = m->invocation_count() + m->compiled_invocation_count();
174 if (c >= MethodHistogramCutoff) m->print_invocation_count();
175 int_total += m->invocation_count();
176 comp_total += m->compiled_invocation_count();
177 if (m->is_final()) final_total += c;
178 if (m->is_static()) static_total += c;
179 if (m->is_synchronized()) synch_total += c;
180 if (m->is_native()) nativ_total += c;
181 if (m->is_accessor()) acces_total += c;
182 }
183 tty->cr();
184 total = int_total + comp_total;
185 tty->print_cr("Invocations summary:");
186 tty->print_cr("\t%9d (%4.1f%%) interpreted", int_total, 100.0 * int_total / total);
|
95 // %%% there can be 32-bit overflow here
96 return ((*b)->invocation_count() + (*b)->compiled_invocation_count())
97 - ((*a)->invocation_count() + (*a)->compiled_invocation_count());
98 }
99
100 void collect_profiled_methods(Method* m) {
101 Thread* thread = Thread::current();
102 methodHandle mh(thread, m);
103 if ((m->method_data() != NULL) &&
104 (PrintMethodData || CompilerOracle::should_print(mh))) {
105 collected_profiled_methods->push(m);
106 }
107 }
108
109 void print_method_profiling_data() {
110 if (ProfileInterpreter COMPILER1_PRESENT(|| C1UpdateMethodData) &&
111 (PrintMethodData || CompilerOracle::should_print_methods())) {
112 ResourceMark rm;
113 HandleMark hm;
114 collected_profiled_methods = new GrowableArray<Method*>(1024);
115 SystemDictionary::methods_do(collect_profiled_methods);
116 collected_profiled_methods->sort(&compare_methods);
117
118 int count = collected_profiled_methods->length();
119 int total_size = 0;
120 if (count > 0) {
121 for (int index = 0; index < count; index++) {
122 Method* m = collected_profiled_methods->at(index);
123 ttyLocker ttyl;
124 tty->print_cr("------------------------------------------------------------------------");
125 m->print_invocation_count();
126 tty->print_cr(" mdo size: %d bytes", m->method_data()->size_in_bytes());
127 tty->cr();
128 // Dump data on parameters if any
129 if (m->method_data() != NULL && m->method_data()->parameters_type_data() != NULL) {
130 tty->fill_to(2);
131 m->method_data()->parameters_type_data()->print_data_on(tty);
132 }
133 m->print_codes();
134 total_size += m->method_data()->size_in_bytes();
135 }
146
147 GrowableArray<Method*>* collected_invoked_methods;
148
149 void collect_invoked_methods(Method* m) {
150 if (m->invocation_count() + m->compiled_invocation_count() >= 1 ) {
151 collected_invoked_methods->push(m);
152 }
153 }
154
155
156
157
158 void print_method_invocation_histogram() {
159 ResourceMark rm;
160 HandleMark hm;
161 collected_invoked_methods = new GrowableArray<Method*>(1024);
162 SystemDictionary::methods_do(collect_invoked_methods);
163 collected_invoked_methods->sort(&compare_methods);
164 //
165 tty->cr();
166 tty->print_cr("Histogram Over Method Invocation Counters (cutoff = " INTX_FORMAT "):", MethodHistogramCutoff);
167 tty->cr();
168 tty->print_cr("____Count_(I+C)____Method________________________Module_________________");
169 unsigned total = 0, int_total = 0, comp_total = 0, static_total = 0, final_total = 0,
170 synch_total = 0, nativ_total = 0, acces_total = 0;
171 for (int index = 0; index < collected_invoked_methods->length(); index++) {
172 Method* m = collected_invoked_methods->at(index);
173 int c = m->invocation_count() + m->compiled_invocation_count();
174 if (c >= MethodHistogramCutoff) m->print_invocation_count();
175 int_total += m->invocation_count();
176 comp_total += m->compiled_invocation_count();
177 if (m->is_final()) final_total += c;
178 if (m->is_static()) static_total += c;
179 if (m->is_synchronized()) synch_total += c;
180 if (m->is_native()) nativ_total += c;
181 if (m->is_accessor()) acces_total += c;
182 }
183 tty->cr();
184 total = int_total + comp_total;
185 tty->print_cr("Invocations summary:");
186 tty->print_cr("\t%9d (%4.1f%%) interpreted", int_total, 100.0 * int_total / total);
|