[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-hotspot-runtime-dev
Subject: JVMTI VMObjectAlloc
From: keith.mcguigan () oracle ! com (Keith McGuigan)
Date: 2011-06-10 18:28:25
Message-ID: 06413E3D-CEFD-455B-954C-5A7C1D1E7AE7 () oracle ! com
[Download RAW message or body]
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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic