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
> > 
> 
                                          

Reply via email to