From: KhanhNguyen <kha...@uc...> - 2012-06-23 01:39:52
|
Assume these 2 lines A a = new A(); a.f = 6; How can I use New and PutField instruction format to get id/name of the object a? Thank you Khanh -- View this message in context: http://old.nabble.com/PutField-and-New-instructions-tp34057506p34057506.html Sent from the jikesrvm-researchers mailing list archive at Nabble.com. |
From: Colin(Du Li) <daw...@gm...> - 2012-06-23 01:48:40
|
What do you mean "id/name of the object"? Are you talking about the address of the object? Du KhanhNguyen wrote: > > Assume these 2 lines > A a = new A(); > a.f = 6; > How can I use New and PutField instruction format to get id/name of the > object a? > Thank you > Khanh > > > -- View this message in context: http://old.nabble.com/PutField-and-New-instructions-tp34057506p34057566.html Sent from the jikesrvm-researchers mailing list archive at Nabble.com. |
From: KhanhNguyen <kha...@uc...> - 2012-06-23 02:00:26
|
I mean whatever is unique that the object is associated with in Jikes. Colin(Du Li) wrote: > > What do you mean "id/name of the object"? > Are you talking about the address of the object? > > Du > > KhanhNguyen wrote: >> >> Assume these 2 lines >> A a = new A(); >> a.f = 6; >> How can I use New and PutField instruction format to get id/name of the >> object a? >> Thank you >> Khanh >> >> >> > > -- View this message in context: http://old.nabble.com/PutField-and-New-instructions-tp34057506p34057592.html Sent from the jikesrvm-researchers mailing list archive at Nabble.com. |
From: Eliot M. <mo...@cs...> - 2012-06-23 02:16:31
|
On 6/22/2012 10:00 PM, KhanhNguyen wrote: > > I mean whatever is unique that the object is associated with in Jikes. > > Colin(Du Li) wrote: >> >> What do you mean "id/name of the object"? >> Are you talking about the address of the object? >> >> Du >> >> KhanhNguyen wrote: >>> >>> Assume these 2 lines >>> A a = new A(); >>> a.f = 6; >>> How can I use New and PutField instruction format to get id/name of the >>> object a? >>> Thank you >>> Khanh You aren't giving us a lot of context here. If you are talking about getting information from the Java source or bytecode level, there is no way to get that information. You can ask for an object's hash code (not guaranteed to be unique, but guaranteed to be spread out over a range of values) and you can test whether two objects are the same. This is just standard Java-ness. Using VM magic methods, you can obtain the address of an object ... but if the garbage collector moves the object, then its address will change. Under HotSpot, J9, etc., the JVMTI interface is supported, and you can associated an id with an object from the C/C++ code side of the tool from which you are using JVMTI. Jikes RVM, though, does not fully support the JVMTI AFAIK. So, are you talking about code in the compiler? Code in the run=time system? Ordinary Java code? And what are you trying to do? Generally, the mode you tell us, the better was can answer your question ... Regards -- Eliot Moss |
From: Robin G. <rob...@gm...> - 2012-06-23 02:20:29
|
Sounds to me like you're trying to get us to do your homework for you ... If not, you need to give us more context - what are you trying to achieve ? On 23/06/12 12:00, KhanhNguyen wrote: > I mean whatever is unique that the object is associated with in Jikes. > > Colin(Du Li) wrote: >> What do you mean "id/name of the object"? >> Are you talking about the address of the object? >> >> Du >> >> KhanhNguyen wrote: >>> Assume these 2 lines >>> A a = new A(); >>> a.f = 6; >>> How can I use New and PutField instruction format to get id/name of the >>> object a? >>> Thank you >>> Khanh >>> >>> >>> >> |
From: KhanhNguyen <kha...@uc...> - 2012-06-23 02:39:13
|
Sorry for not being clear. What I am trying to do is value profiling on object in run time. So I have to put instrumentation code to record the value of each field of the objects created. What I was thinking is after the NEW instruction, the object is created, then there must be some sort of identifier for it. Then when hitting PUTFIELD instruction, it's just natural that the instruction has info about which object and which field in order to do the storing right? I found how to get the id for the field using MemberReference but no clue on the object. Therefore, my question is, how can I pull the identifier of the object out of the NEW and PUTFIELD instruction using the IR in opt-compiler. Again, I dont know what I am looking for, just something really unique about the object created that can be used like a key in hashmap. -- View this message in context: http://old.nabble.com/PutField-and-New-instructions-tp34057506p34057652.html Sent from the jikesrvm-researchers mailing list archive at Nabble.com. |
From: Colin(Du Li) <daw...@gm...> - 2012-06-23 02:44:54
|
Hashcode is used a key in hashmap. As Eliot pointed out, hashcode is not unique either. Again, whether hashcode is good enough to serve your purpose depends on what you want to use the "id" for. Du KhanhNguyen wrote: > > Sorry for not being clear. > > What I am trying to do is value profiling on object in run time. So I have > to put instrumentation code to record the value of each field of the > objects created. What I was thinking is after the NEW instruction, the > object is created, then there must be some sort of identifier for it. Then > when hitting PUTFIELD instruction, it's just natural that the instruction > has info about which object and which field in order to do the storing > right? I found how to get the id for the field using MemberReference but > no clue on the object. > Therefore, my question is, how can I pull the identifier of the object out > of the NEW and PUTFIELD instruction using the IR in opt-compiler. Again, I > dont know what I am looking for, just something really unique about the > object created that can be used like a key in hashmap. > > -- View this message in context: http://old.nabble.com/PutField-and-New-instructions-tp34057506p34057660.html Sent from the jikesrvm-researchers mailing list archive at Nabble.com. |
From: Eliot M. <mo...@cs...> - 2012-06-23 03:02:38
|
On 6/22/2012 10:39 PM, KhanhNguyen wrote: > > Sorry for not being clear. Khanh -- Are you in a Java programming class? If so, then hashCode() is probably what you want. From the level of Java source, or even bytecode, you cannot obtain or manipulate object addresses / ids in the sense you seem to mean. That's just they way Java is, unlike C/C++. Of course *internally* there really is an address ... but Java does not let you know what it is, and in any case, an object can move around. Between them hashCode() and == let you implement a suitable hash map, and you can then tell whether you've seen an object before, what values you saw in its fields, etc. Again, you STILL have not told us your context and what it is you are REALLY trying to accomplish. This is feeling more and more like you are in a programming class and are trying to get us to do your homework for you ... EM |
From: KhanhNguyen <kha...@uc...> - 2012-06-23 07:00:11
|
This is not a programming homework. My question was simply in New and PutField instructions, how to tell the same object is being referred to. Per Eliot's explanation, hashcode() is the answer. Thank you so much -- View this message in context: http://old.nabble.com/PutField-and-New-instructions-tp34057506p34057985.html Sent from the jikesrvm-researchers mailing list archive at Nabble.com. |
From: Eliot M. <mo...@cs...> - 2012-06-23 14:05:23
|
On 6/23/2012 3:00 AM, KhanhNguyen wrote: > > This is not a programming homework. > > My question was simply in New and PutField instructions, how to tell the > same object is being referred to. Per Eliot's explanation, hashcode() is the > answer. Thank you so much Or == on objects will tell you same versus different with complete reliability. hashCode() serves to narrow down the ones that could *possibly* be the same. Regards -- EM |
From: Eliot M. <mo...@cs...> - 2012-06-24 02:30:40
|
On 6/23/2012 6:09 PM, kha...@uc... wrote: > Dear Eliot, Ah, NOW we have context! You are working inside Jikes RVM and trying to understand how to use the internal form, probably HIR. Since I am not expert in the details, I will let someone else, perhaps Dave Grove, answer your questions :-) ... Regards -- EM |
From: Eliot M. <mo...@cs...> - 2012-06-24 02:31:29
|
Here's the message Khanh sent .... Eliot -------- Original Message -------- Subject: Re: [rvm-research] PutField and New instructions Date: Sat, 23 Jun 2012 15:09:34 -0700 From: kha...@uc... To: mo...@cs... Dear Eliot, Thanks so much for your help. I believe the root of my problem is I don't know/understand the semantics of the NEW and PUTFIELD instruction For example, NEW instruction format has parameters (Operator o, RegisterOperand Result, TypeOperand Type) I know that Operator o is NEW operator, from TypeOperand I can see the class TypeOperand Type = New.getClearType(inst); RVMClass cls = (RVMClass) Type.getVMType(); [Copied from hir2lir/ExpandRuntimeServices.java] then from RVMClass I can tell the fields of the class. What and why there is RegisterOperand Result there? I assume Result will store the info the new object created. Moving on to PUTFIELD, it has parameters (Operator o, Operand Value, Operand Ref, Operand Offset, LocationOperand Location, Operand Guard) Here o is PUTFIELD operator, Value is either primitive or ref value to be stored, Location can lead me to the field [Location.isFieldAccess() -> getFieldRef -> getId()] So, what Ref and Offset mean? API doc. doesn't tell anything about the semantics. I'm kind of person who would like to see examples. Let me try to make more sense with this example (1) A a1 = new A() (2) A a2 = new A() (3) a1.f = 6 (4) a2.f = 7 So 2 objects a1, a2. I want to trace the value of the field f in both a1 and a2. After (1) and (2) I need to have some thing unique that a1 and a2 is associated with. You said hashcode() could work. I then create an entry in my record board: Object a1 Field 1 Field 2 ... Object a2 Field 1 Field 2 ... Field ith is an array of fixed size which record the top N value of field ith during execution Now, hitting (3), while I know to extract field ith id (f) and the value 6, I do not know how to record the value in appropriate place, i.e. in Object a1 record, not a2. Vice versa for line (4). In the PUTFIELD instruction format, which operand can lead me to the object? Thank you so much for your time, Once again, this is not a homework, it's just a Jikes beginner's question. Regards, Khanh Nguyen |
From: Michael B. <mik...@cs...> - 2012-06-29 21:12:20
|
Hi Khanh, As you note: The New instruction format: (Operator o, RegisterOperand Result, TypeOperand Type) The PutField instruction format: (Operator o, Operand Value, Operand Ref, Operand Offset, LocationOperand Location, Operand Guard) It sounds like you want to get the virtual register operand for the object being allocated or written to in the New and PutField, respectively, i.e., o in the following two lines: o = new MyObject(...); o.f = x; That means you want to get New's "Result" parameter and PutField's "Ref" parameter. You can use these virtual register operands when inserting instrumentation that will access the same objects being allocated/accessed by New/PutField. Since each instruction in the IR should use a separate copy of each operand, be sure to call copy() or copyRO() on the operands to make a copy of them in any new instructions you add them to. Are you editing Jikes RVM with an IDE like Eclipse ( http://jikesrvm.org/Editing+JikesRVM+in+an+IDE)? That's effectively required for editing Jikes, and it should help with understanding how the opt compiler IR instructions works. Cheers, Mike On 06/23/2012 10:31 PM, Eliot Moss wrote: > Here's the message Khanh sent .... Eliot > > > -------- Original Message -------- > Subject: Re: [rvm-research] PutField and New instructions > Date: Sat, 23 Jun 2012 15:09:34 -0700 > From: kha...@uc... > To: mo...@cs... > > Dear Eliot, > > Thanks so much for your help. I believe the root of my problem is I don't > know/understand the semantics of the NEW and PUTFIELD instruction > For example, > NEW instruction format has parameters (Operator o, RegisterOperand Result, > TypeOperand Type) I know that Operator o is NEW operator, from TypeOperand > I can see the class > TypeOperand Type = New.getClearType(inst); > RVMClass cls = (RVMClass) Type.getVMType(); [Copied from > hir2lir/ExpandRuntimeServices.java] then from RVMClass I can tell the > fields of the class. > What and why there is RegisterOperand Result there? I assume Result will > store the info the new object created. > > Moving on to PUTFIELD, it has parameters (Operator o, Operand Value, > Operand Ref, Operand Offset, LocationOperand Location, Operand Guard) > Here o is PUTFIELD operator, Value is either primitive or ref value to be > stored, Location can lead me to the field [Location.isFieldAccess() -> > getFieldRef -> getId()] > So, what Ref and Offset mean? API doc. doesn't tell anything about the > semantics. I'm kind of person who would like to see examples. > > > > Let me try to make more sense with this example > (1) A a1 = new A() > (2) A a2 = new A() > (3) a1.f = 6 > (4) a2.f = 7 > > So 2 objects a1, a2. I want to trace the value of the field f in both a1 > and a2. After (1) and (2) I need to have some thing unique that a1 and a2 > is associated with. You said hashcode() could work. I then create an entry > in my record board: > Object a1 > Field 1 > Field 2 > ... > Object a2 > Field 1 > Field 2 > ... > Field ith is an array of fixed size which record the top N value of field > ith during execution > Now, hitting (3), while I know to extract field ith id (f) and the value > 6, I do not know how to record the value in appropriate place, i.e. in > Object a1 record, not a2. Vice versa for line (4). In the PUTFIELD > instruction format, which operand can lead me to the object? > > Thank you so much for your time, > Once again, this is not a homework, it's just a Jikes beginner's question. > > Regards, > > Khanh Nguyen > > > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Jikesrvm-researchers mailing list > Jik...@li... > https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers |