Skip to main content

Java references in nutshell

Java developers struggle to use java references and i don't blame them. The topic seldom covered by text books and even code reviews rarely give emphasis on usage of references. Why the topic is important at all? and if everybody (atleast people i have come across) is coding without it why the hell you need it?

Since you are reading this, either you are already aware of them or for the interview. Anyways, knowing references helps you manage memory better because you are able to define the behavior of the object when GC (garbage collector) is run.

Type of references:

1. Strong Reference: The normal reference in the java code is strong reference and the object referenced by strong reference is eligible for GC as soon as scope ends or reference started pointing to null in the code.
E.g. Person p = new Person();
                p = null; // will make object initialized above eligible for GC
2. Weak Reference: As name suggest these reference are weaker than the strong references.  Their are couple of ways to use them one via WeakReference call which can wrap your object and you can access the object through WeakReference.get API. Get API will be returning null id the object is GCed. (You can also use WeakHashMap)


Usage: These objects stay in the memory till the time they are referenced from any strong reference in the memory. In other words as soon as they loose accessibility from strong reference they become eligible for GC.

3. Soft Reference: Soft reference is similar to weak reference however weaker than weak references. They put the additional check on there GC eligibility, which is if GC needs space.  So basically they sits in memory still the time memory is available. Use the SoftReference API for this type of references.

Usage: These find good usage in building cache because if memory is available they don't discard the object and hence saves you the additional reload.

4. Phantom Reference: This type of reference is used to track the object if it has been garbage collected. PhantomReference get API always returns null. Object cannot be obtained from it unlike finalize() API.


Usage: So, if your object needs to be freed only when object using it becomes garbage collected than you should be using this API. Another use case is before loading  large object you want to check if the other larger object currently in memory is GCed which will help you avoid the out of memory exception.

Hope this helps :)



  

Comments

Popular posts from this blog

Master Detail

Master-Detail Eclipse Forms I just finished working on the editor which uses the Master-Detail pattern of the eclipse forms. During which I faced several problems like: In my master block, when the size of table-viewer increased, the master block shows the scrollbar instead of table-viewer. Also, it made the length of the detail and master parts equal which made my editor unusable Detail part having scroll problems like the one mentioned above Setting the details part data-dynamically was yet another area where I faced a lot of problem In this blog, I will be giving a brief introduction about the master-detail pattern and will be addressing the problems mentioned above. The article by Dejan Glozic is really helpful and explains the basics of the eclipse forms. I’ll be explaining the stuff using FUSE Integration Designer(FID) which is an open source and available for download . And the screen-shots will be from the Messaging module of the FID using the example of JMS Messages . In

Interview at Progress Software

I have given a lot of interviews before however, this one was special. Let me start from the beginning. I got a call from Progress Software and was scheduled for the first telephonic discussion. Next day, I got a call from HR and she asked me questions on Java and a few basic puzzles.  After clearing the previous round, I got scheduled for the second telephonic interview. This interview covered Java, design-related problems and algorithms. After a week, I got a call from the HR for the onsite interviews in Hyderabad. This is the first time I googled about Progress Software. I said yes for the onsite interviews. Journey to onsite started not as planned after my flight got delayed. Because of fog-related delay in Delhi, I reached the PSI (Progress Software India) office couple of hours late.  HR introduced me to the first interviewer. The interviewer explained the first round. It was a coding round (I am not a big fan of coding rounds), the problem was well expl

java.net.SocketException: Connection reset

I am able to fix the problem via setting the following params on the HTTPClient class... client.getParams().setParameter("http.socket.timeout", new Integer(0)); client.getParams().setParameter("http.connection.stalecheck", new Boolean(true)); java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.io.BufferedInputStream.fill(Unknown Source) at java.io.BufferedInputStream.read(Unknown Source) at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:77) at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105) at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1115) at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1832) at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1590) at org.apache.commons.httpclient.HttpMethodBase.execute(