comparison src/os/solaris/vm/dtraceJSDT_solaris.cpp @ 2177:3582bf76420e

6990754: Use native memory and reference counting to implement SymbolTable Summary: move symbols from permgen into C heap and reference count them Reviewed-by: never, acorn, jmasa, stefank
author coleenp
date Thu, 27 Jan 2011 16:11:27 -0800
parents f95d63e2154a
children 1d1603768966
comparison
equal deleted inserted replaced
2176:27e4ea99855d 2177:3582bf76420e
140 JVM_DTraceProvider* provider = &providers[prvc]; 140 JVM_DTraceProvider* provider = &providers[prvc];
141 // Provider name 141 // Provider name
142 ++strcount; 142 ++strcount;
143 for(int prbc = 0; prbc < provider->probe_count; ++prbc) { 143 for(int prbc = 0; prbc < provider->probe_count; ++prbc) {
144 JVM_DTraceProbe* p = &(provider->probes[prbc]); 144 JVM_DTraceProbe* p = &(provider->probes[prbc]);
145 symbolOop sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); 145 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature();
146 // function + name + one per argument 146 // function + name + one per argument
147 strcount += 2 + ArgumentCount(sig).size(); 147 strcount += 2 + ArgumentCount(sig).size();
148 } 148 }
149 } 149 }
150 150
176 char* name = java_lang_String::as_utf8_string( 176 char* name = java_lang_String::as_utf8_string(
177 JNIHandles::resolve_non_null(p->name)); 177 JNIHandles::resolve_non_null(p->name));
178 stroffs[curstr++] = string_index; 178 stroffs[curstr++] = string_index;
179 string_index += strlen(name) + 1; 179 string_index += strlen(name) + 1;
180 180
181 symbolOop sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); 181 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature();
182 SignatureStream ss(sig); 182 SignatureStream ss(sig);
183 for ( ; !ss.at_return_type(); ss.next()) { 183 for ( ; !ss.at_return_type(); ss.next()) {
184 BasicType bt = ss.type(); 184 BasicType bt = ss.type();
185 const char* t = NULL; 185 const char* t = NULL;
186 if (bt == T_OBJECT && 186 if (bt == T_OBJECT &&
225 225
226 // We need number of arguments argoffs 226 // We need number of arguments argoffs
227 uint32_t argscount = 0; 227 uint32_t argscount = 0;
228 for(int prbc = 0; prbc < provider->probe_count; ++prbc) { 228 for(int prbc = 0; prbc < provider->probe_count; ++prbc) {
229 JVM_DTraceProbe* p = &(provider->probes[prbc]); 229 JVM_DTraceProbe* p = &(provider->probes[prbc]);
230 symbolOop sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); 230 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature();
231 argscount += ArgumentCount(sig).size(); 231 argscount += ArgumentCount(sig).size();
232 } 232 }
233 secoffs[argoffs_sec] = align_size_up(offset, alignment_for[ARG_OFFSETS]); 233 secoffs[argoffs_sec] = align_size_up(offset, alignment_for[ARG_OFFSETS]);
234 secsize[argoffs_sec] = sizeof(uint8_t) * argscount; 234 secsize[argoffs_sec] = sizeof(uint8_t) * argscount;
235 offset = secoffs[argoffs_sec] + secsize[argoffs_sec]; 235 offset = secoffs[argoffs_sec] + secsize[argoffs_sec];
296 char* name = java_lang_String::as_utf8_string( 296 char* name = java_lang_String::as_utf8_string(
297 JNIHandles::resolve_non_null(p->name)); 297 JNIHandles::resolve_non_null(p->name));
298 strcpy(str, name); 298 strcpy(str, name);
299 str += strlen(name) + 1; 299 str += strlen(name) + 1;
300 300
301 symbolOop sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); 301 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature();
302 SignatureStream ss(sig); 302 SignatureStream ss(sig);
303 for ( ; !ss.at_return_type(); ss.next()) { 303 for ( ; !ss.at_return_type(); ss.next()) {
304 BasicType bt = ss.type(); 304 BasicType bt = ss.type();
305 const char* t; 305 const char* t;
306 if (bt == T_OBJECT && 306 if (bt == T_OBJECT &&
431 sec->dofs_size = secsize[argoffs_sec]; 431 sec->dofs_size = secsize[argoffs_sec];
432 // Make arguments 432 // Make arguments
433 uint8_t* par = (uint8_t*)(dof + sec->dofs_offset); 433 uint8_t* par = (uint8_t*)(dof + sec->dofs_offset);
434 for (int prbc = 0; prbc < provider->probe_count; ++prbc) { 434 for (int prbc = 0; prbc < provider->probe_count; ++prbc) {
435 JVM_DTraceProbe* p = &(provider->probes[prbc]); 435 JVM_DTraceProbe* p = &(provider->probes[prbc]);
436 symbolOop sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); 436 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature();
437 uint8_t count = (uint8_t)ArgumentCount(sig).size(); 437 uint8_t count = (uint8_t)ArgumentCount(sig).size();
438 for (uint8_t i = 0; i < count; ++i) { 438 for (uint8_t i = 0; i < count; ++i) {
439 *par++ = i; 439 *par++ = i;
440 } 440 }
441 } 441 }