Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > How to get address of a Java object?

Reply
Thread Tools

How to get address of a Java object?

 
 
Naresh Agarwal
Guest
Posts: n/a
 
      08-10-2005
Hi

Is there a way to get address of a Java object?
I believe hashCode function in Object class do gives the object
reference, but this is specific to JVM implementation.

thanks,
Naresh Agarwal

 
Reply With Quote
 
 
 
 
Robert Klemme
Guest
Posts: n/a
 
      08-10-2005
Naresh Agarwal wrote:
> Hi
>
> Is there a way to get address of a Java object?
> I believe hashCode function in Object class do gives the object
> reference, but this is specific to JVM implementation.


What do you need that for? In Java, the reference is all you get - and
all you need. Note that physical memory locations might change due to GC
activity.

Regards

robert

 
Reply With Quote
 
 
 
 
jan V
Guest
Posts: n/a
 
      08-10-2005
> Is there a way to get address of a Java object?

No. Java's designers have quite consciously abstracted machine addresses out
of the picture to eliminate a whole class of pointer-related errors which
were/are common in C++.


 
Reply With Quote
 
Roedy Green
Guest
Posts: n/a
 
      08-10-2005
On 10 Aug 2005 04:47:53 -0700, "Naresh Agarwal"
<> wrote or quoted :

>Is there a way to get address of a Java object?


toString sometimes gives it to you.
I'd look in the debugging stuff. For normal Java, the address is
supposed to be irrelevant.

--
Bush crime family lost/embezzled $3 trillion from Pentagon.
Complicit Bush-friendly media keeps mum. Rumsfeld confesses on video.
http://www.infowars.com/articles/us/...s_rumsfeld.htm

Canadian Mind Products, Roedy Green.
See http://mindprod.com/iraq.html photos of Bush's war crimes
 
Reply With Quote
 
John Currier
Guest
Posts: n/a
 
      08-11-2005
Roedy Green wrote:
> On 10 Aug 2005 04:47:53 -0700, "Naresh Agarwal"
> <> wrote or quoted :
>
> >Is there a way to get address of a Java object?

>
> toString sometimes gives it to you.


I'm surprised to hear you say that Roedy. If nobody's overloaded
toString() then the implementation in Object will dump the object's
hash code. It does have an @ in the generated string that could
possibly imply an address, but there's nothing that says it's an
address...especially when you consider Robert Kelmme's comment about
the object potentially being moved by the garbage collector.

Some of the debugging stuff that you mentioned probably would make the
addresses available. Another option would be to make some funky JNI
calls that give you the object's address, but then it can always move
unless you lock it down or do some interesting callbacks.

John
http://schemaspy.sourceforge.net

 
Reply With Quote
 
Chris Uppal
Guest
Posts: n/a
 
      08-11-2005
John Currier wrote:

> Another option would be to make some funky JNI
> calls that give you the object's address, but then it can always move
> unless you lock it down or do some interesting callbacks.


Not even via JNI. JNI doesn't hand out objects' addresses, only "handles" that
can be used to refer to them.

Incidentally, besides the possibility of objects moving in memory, another
reason not to hand out their addresses ever (through /any/ interface) is that
the concept of "the address" is not well-defined. It assumes that objects are
stored in contiguous storage, and that is by no means guaranteed. (I can think
of at least two good reason why a VM designer might decide to "split" objects,
although as far as I'm aware, the major JVM providers have, in fact, chosen to
use a contiguous representation.)

-- chris


 
Reply With Quote
 
Oliver Wong
Guest
Posts: n/a
 
      08-12-2005
"Chris Uppal" <> wrote in message
news:42fb058b$0$38040$.. .
> (I can think
> of at least two good reason why a VM designer might decide to "split"
> objects,
> although as far as I'm aware, the major JVM providers have, in fact,
> chosen to
> use a contiguous representation.)


Out of curiosity, can you state these reasons? All I can think of is
issues with RMI.

- Oliver


 
Reply With Quote
 
Chris Uppal
Guest
Posts: n/a
 
      08-13-2005
Oliver Wong wrote:

> > (I can think
> > of at least two good reason why a VM designer might decide to "split"
> > objects,
> > although as far as I'm aware, the major JVM providers have, in fact,
> > chosen to
> > use a contiguous representation.)

>
> Out of curiosity, can you state these reasons? All I can think of is
> issues with RMI.


What I had in mind:

Some GC-ed languages use an object representation where the "object" is split
into a header of, say, 8 to 16 bytes, which itself contains a pointer to the
body, where the object's non-static fields, etc, are stored. This permits
easier implementation of moving GC, and has other benefits for languages with
less crippled semantics than Java (e.g. dynamic resizing of objects, or
Smalltalk's #become: operation).

There has been some research on the benefits of splitting objects so that their
frequently used fields are stored separately from their less frequently used
ones. That has the benefit that more of the /useful/ data will fit into the
data caches (on-chip, or wherever) so the program on the whole may run faster
(at the cost that infrequently used fields take longer to access).

It may be worth splitting large arrays into "pages"; memory fragmentation can
be avoided by ensuring that there is a single, fixed, maximum size of any
allocation.

Incidentally, any/all the above might have greater benefit on a JVM designed to
make best use of a loosely-coupled multi-CPU architecture. (Though whether it
would be actually /worth/ the effort of creating a special implementation for
such an application is a different question). You point about RMI may reflect
the same thinking -- if you can split an object so that you don't have to copy
/all/ of the object's state in order to use /any/ of its state, then you may
see a nett gain.

-- chris


 
Reply With Quote
 
Jeff Schwab
Guest
Posts: n/a
 
      08-13-2005
Chris Uppal wrote:
> Oliver Wong wrote:
>
>
>>>(I can think
>>>of at least two good reason why a VM designer might decide to "split"
>>>objects,
>>>although as far as I'm aware, the major JVM providers have, in fact,
>>>chosen to
>>>use a contiguous representation.)

>>
>> Out of curiosity, can you state these reasons? All I can think of is
>>issues with RMI.

>
>
> What I had in mind:
>
> Some GC-ed languages use an object representation where the "object" is split
> into a header of, say, 8 to 16 bytes, which itself contains a pointer to the
> body, where the object's non-static fields, etc, are stored. This permits
> easier implementation of moving GC, and has other benefits for languages with
> less crippled semantics than Java (e.g. dynamic resizing of objects, or
> Smalltalk's #become: operation).
>
> There has been some research on the benefits of splitting objects so that their
> frequently used fields are stored separately from their less frequently used
> ones. That has the benefit that more of the /useful/ data will fit into the
> data caches (on-chip, or wherever) so the program on the whole may run faster
> (at the cost that infrequently used fields take longer to access).
>
> It may be worth splitting large arrays into "pages"; memory fragmentation can
> be avoided by ensuring that there is a single, fixed, maximum size of any
> allocation.
>
> Incidentally, any/all the above might have greater benefit on a JVM designed to
> make best use of a loosely-coupled multi-CPU architecture. (Though whether it
> would be actually /worth/ the effort of creating a special implementation for
> such an application is a different question). You point about RMI may reflect
> the same thinking -- if you can split an object so that you don't have to copy
> /all/ of the object's state in order to use /any/ of its state, then you may
> see a nett gain.


When I first started using C, it was not uncommon to group data
according to type so one wouldn't waste "padding" bytes necessary for
alignment. For example:

struct S {
char c; /* OK, arbitrary address. */

/* Often three bytes of padding required
* here to provide for proper alignment of int.
*/

int i; /* Requires special alignment. */
};

An array of 1000 such structs might waste 3KB. It seemed more efficient
to break the data into two arrays: One of 1000 chars, and another of
1000 ints. Each "struct" was then retrieved by a single index that
related locations in the multiple arrays.

I don't know whether this technique is ever used by Java implementations.
 
Reply With Quote
 
Jeff Schwab
Guest
Posts: n/a
 
      08-13-2005
Jeff Schwab wrote:

> When I first started using C...


> struct S {

/* ... */
> };


Whoops! Too much C++. Should have said:

typedef struct { /* ... */ } S;
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Get ubuntu ! Get ubuntu ! Get ubuntu ! Get ubuntu ! Getubuntu Windows 64bit 1 06-01-2009 08:54 AM
VPN with DMZ IP address NETed to LAN IP address!!! route-map!!! examples20001@gmail.com Cisco 0 02-07-2006 04:05 PM
PIX Firewall MAC address VPN IP address Julian Dragut Cisco 1 02-07-2006 07:57 AM
obtaining the IP ADDRESS of an IP POHNE by its MAC ADDRESS ProgDario Cisco 17 05-06-2005 02:32 PM
Routing to public IP of NAT address from internal NAT address Andrew Albert Cisco 1 02-08-2005 07:05 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57