wood burning stoves 2.0*
The moose likes Beginning Java and the fly likes What does reference variable actually hold when initialized? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of OCM Java EE 6 Enterprise Architect Exam Guide this week in the OCMJEA forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "What does reference variable actually hold when initialized?" Watch "What does reference variable actually hold when initialized?" New topic
Author

What does reference variable actually hold when initialized?

Bhavesh Sangwan
Ranch Hand

Joined: Aug 08, 2012
Posts: 57
Hi experts ! When we create an object in java, what the actual value hplded by myclass reference...? Somebody asked me this question and I answered like - this holds the address of perticular object. But he told this is wrong answer, as java does't support pointer then how should it point some address...
So please anybody clear my confusion that what the actual process is performed by jvm here....
Greg Charles
Sheriff

Joined: Oct 01, 2001
Posts: 2849
    
  11

Your friend is being somewhat picky. The variable holds a reference, which the JVM can use to locate the object in the heap. The reference is not a physical memory address, so technically it's not a pointer. Conceptually, it's practically the same thing though.
Henry Wong
author
Sheriff

Joined: Sep 28, 2004
Posts: 18765
    
  40

Greg Charles wrote:Your friend is being somewhat picky. The variable holds a reference, which the JVM can use to locate the object in the heap. The reference is not a physical memory address, so technically it's not a pointer. Conceptually, it's practically the same thing though.


As an implementation detail, with the Azul JVM (which I had the pleasure to work on), the lower 48 bits (I think) is a pointer to the memory address of the object. The rest of the bits is some sort of ID to confirm that it does point to a valid object. With the Sun JVM, I was under the impression that the reference did hold a memory address. Of course, this is purely an implementation detail -- the specification doesn't say that it has to be a direct memory address.

Henry
Bhavesh Sangwan
Ranch Hand

Joined: Aug 08, 2012
Posts: 57
Thanks Friends ... I'm partially satisfy but still not sure about the actual concept.. I think someone must be sure about this concept. Yes because finally it's working somehow but HOW... HOW...?
Greg Charles
Sheriff

Joined: Oct 01, 2001
Posts: 2849
    
  11

Well, I understand your frustration, but a certain amount of abstraction frees you to concentrate on the things that matter, and not get lost in details. I think it's important to understand the difference between a stack and the heap, that all variables aside from primitives hold references that can be used to locate an object on the heap, and that all objects are stored on the heap. How objects are actually located using the reference value is up to the implementer of the JVM, and you understand the concept of how it works, without necessarily understanding the details.

Henry has a good point that the reference might contain the physical memory address of the object, which would be just like a pointer. However, unlike a pointer in C, for example, you can't do arithmetic on a reference to find nearby objects in the heap. For all intents and purposes, the reference is a random, but unique value that lets the JVM find your object. Many variables can hold the same reference value, in which case they are referring to the same object. An object created in a method lives in the heap and survives even after the method completes. If it was assigned to a local variable in that method, then the reference was on the stack, and is gone after the method completes. The job of the Java garbage collector is to examine the heap looking for objects that have no references either on the heap or in an active stack, and removing them. How it does that is another thing that you should understand in concept, though not necessarily in detail.
Jayesh A Lalwani
Bartender

Joined: Jan 17, 2008
Posts: 2346
    
  28

If you are going to get nitpicky about pointer vs reference then, even "pointer" is really an abstract concept. The pointer is a logical address into the virtual memory assigned to the process. The OS translates it to a physical memory address, which itself is also an abstract concept. The BIOS uses a memory controller to translate the physical memory address to the actual RAM

It's turtles all the way down. For most practical purposes, a reference is a pointer is a memory address. Everything else is details that you don't need to worry about.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: What does reference variable actually hold when initialized?