Skip to main content

Refrences Type Java

To understand Garbage collection mechanism we must know about the various reference types for object because on that basis the GC reclaim the memory from the object


There are following 4 kinds of reference types in Java:

    Strong references.
    Weak references.
    Soft references.
    Phantom references.


Strong reference: It is most simple as we use it in day to day programming. if not differently specified then an object is a strong Reference Object
Ex String language="English";
A new string object will be created and  a strong reference to it would be stored in the variable 'language';
If any object has a strong reference or it is reachable by any chain of strong reference then JVM will not garbage collect it to avoid any situation where it destroy the object which is currently being worked upon.


Weak reference: These are created using WeakReference class which is present in the java.lang.ref . Weak references are those which are not strong enough to hold the Garbage collection of its object.

RefrenceStudy weakObject= new RefrenceStudy();

WeakReference<RefrenceStudy> weakReference = new WeakReference<RefrenceStudy>(weakObject);
weakObject=null;  
// now the weakObject is eligible for Garbage collection and may be collected when next time GC runs

As the weakObject is set to null and is eligible for GC, weakReference will not be able to stop GC from collecting the weakObject as the WeakReference is not a strong reference to it.
Now, suppose you start calling some method on weakReference object and it suddenly starts returning 'null' because weakObject has been garbage collected then it will cause a problem.
so better solution to this is using WeakHashMap which work same like HashMap except that the keys are referred using weak reference.
If a key is garbage collected then its entry is removed automatically. SO it will help to avoid null pointer as in above case



Soft Reference : These are created using SoftReference class in java.lang.ref, the soft reference are same like weak reference except that it is not as eager to throw object as weak reference is.
Weak reference would be collected on next GC run, immediately but soft reference can delay the garbage collection of the object.
Soft reachable object are generally retained as long as there is plentiful memory available. This makes them a good candidate to be used for cache.
However weak references can be used for meta data.



Phantom reference : These are the weakest references, calling get on this object will always return null.
When we construct phantom reference we must always pass in a RefrenceQueue object which would be helpful to see whether the phantom object has been garbage collected at a particular time or not.
WeakReferences are enqueued as soon as the object to which they point becomes weakly reachable however WeakReference can be resurrect by calling get() method
but get() method on PhantomReference always return null so these can not be resurrect.


Comments

Popular posts from this blog

OBJECT class in Java

OBJECT class in Java : Object is at the top of class hierarchy in java. Every class in the Java system is a descendent (direct or indirect) of the Object class. The Object class defines the basic state and behavior that all objects must have, such as the ability to compare oneself to another object, to convert to a string, to wait on a condition variable, to notify other objects that a condition variable has changed, and to return the object's class. Mainly below methods are provided by Object class : public String toString() returns the string representation of this object. protected Object clone() throws CloneNotSupportedException creates and returns the exact copy (clone) of this object. public boolean equals(Object obj) compares the given object to this object. public int hashCode() returns the hashcode number for this object. public final Class getClass() returns the Class class object of this object. The Class class can further be used to get the metadata of ...

Java Priority Queue sort using lambda expression

Priority Queue :     In Java  Priority Queue  is a  queue  which keeps its elements sorted as per their natural order( example in ascending orders for Integer, alphabetical a-z for alphabets) or using a custom Comparator at the time of creation you can custom sort it. It has most method  similar to a queue  add, clear, poll, peek As priority queue have to compare elements to keep in order so elements must be comparable otherwise, it will throw ClassCastException .  As null can not be compared so you are not allowed to insert null too A program to sort priority queue using Lambda function in Java           c lass   PriorityQueueLambdaJava { public List<Integer> KFrequent( int [] nums, int k) { Map<Integer, Integer> map = new HashMap<>(); for ( int j: nums) { map .put(j, map .getOrDefault(j, 0 ) + 1 ); } PriorityQueue<Map.Entry<Integ...

Important Keywords: Static, Continue,Break:

Important Keywords: Static, Continue,Break:  Static: The static keyword in java is used for memory management mainly.  The static keyword members belongs to the class rather than instance of the class. Following members can be declared as static: variable (also known as class variable) method (also known as class method) block nested class  static variables : We can use static keyword with a class level variable. A static variable is a class variable and doesn’t belong to Object/instance of the class. Since static variables are shared across all the instances of Object, they are not thread safe . Usually static variables are used with final keyword for common resources or constants that can be used by all the objects. If the static variable is not private, we can access it as: ClassName.variableName //static variable example private static int a ge; public static String name; static methods: A static method belongs t...