Hi, Thank you for your help, I'll try to use BCI for the case
bhm > Subject: Re: JVMTI VMObjectAlloc > From: [email protected] > Date: Fri, 10 Jun 2011 11:47:02 -0700 > CC: [email protected]; [email protected] > To: [email protected] > > > Read this carefully. > > http://download.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#VMObjectAlloc > > > -kto > > On Jun 10, 2011, at 11:28 AM, Keith McGuigan wrote: > > > > > Forwarding to serviceability-dev (and Bcc'ing hotspot-runtime-dev off). > > > > I personally don't see anything obviously wrong in the code you sent but it > > looks like you've only sent a small fragment of the code and the problem > > could well be somewhere else. What is the output, and what do you expect? > > Does it count 6, 600, or 6000, 60000 or what? Is it even close? What > > happens when you change the number of iterations in the java program? Are > > you seeing any other threads calling allocation, and if so are you > > implementing the proper locking for your gdata? > > > > -- > > - Keith > > > > On Jun 10, 2011, at 1:58 PM, Lee Ming wrote: > > > >> Hi, > >> I'm doing some test with JVMTI VMObjectAlloc, and it seems like the > >> callback cant catch object allocation properly .e.g: regardless how I > >> tried to allocate new objects in Java program, the agent still report the > >> same number of objects allocated. > >> > >> This is the source code of the callback > >> > >> char *generic_name; > >> jvmtiThreadInfo info; > >> jvmtiError error; > >> > >> (void)memset(&info, 0, sizeof(info)); > >> > >> error = (*jvmti)->GetClassSignature(jvmti, > >> object_klass,&generic_name,NULL); > >> check_jvmti_error(jvmti, error, "can't get class name"); > >> //printf(generic_name); > >> > >> gdata->object_size = gdata->object_size + size; > >> gdata->ccount++; > >> > >> stdout_message("%d.Object allocated, class: > >> %s\tsize:%d\n",gdata->ccount,gener! ic_name,size); > >> printf("total size now is: %I64d\n",gdata->object_size); > >> > >> > >> error = (*jvmti)->GetThreadInfo(jvmti,thread, &info); > >> check_jvmti_error(jvmti, error, "can't get thread info"); > >> printf("thread name:%s\n",info.name); > >> (*jvmti)->Deallocate(jvmti, (unsigned char *) info.name); > >> (*env)->DeleteLocalRef(env, info.thread_group); > >> (*env)->DeleteLocalRef(env, info.context_class_loader); > >> > >> And the sample Java test file > >> public class Test { > >> > >> public static void main(String[] args){ > >> > >> for(int i=0; i<10000;i++){ > >> &nbs! p; &n bsp; Hello h1 = new Hello(1,2); > >> Hello h2 = new Hello(3,4444); > >> Hello h3 = new Hello(3,44); > >> h1.w(); > >> h2.w(); > >> h3.w(); > >> //System.ou! t.println("alloc"); > >> } > >> > >> } > >> > >> } > >> > >> Please let's me know whether i have made any mistake > >> > >> Thank you > >> Bhm > > >
