What is Strong, Soft, Weak and Phantom Memory References in Java

Understanding various available reference objects in Java is quite important to develop memory sensitive applications, and for memory optimization. Java has four type of memory references which are
  • Strong References,
  • Soft References,
  • Weak References and 
  • Phantom References
However to understand the use of these reference objects, we need to understand in brief that how Java manage the memory, and how it manage the garbage. Please refer to other post at 'How does Java Manage the Memory' to understand that. Now if you are clear with the Java Memory Management Concept, understanding various kind of memory references in Java would be easy for you. The description below is given considering that the readers have read the other post as given above (How does Java Manage the Memory).

Strong Reference: The objects in memory which are referenced from memory stack (without a reference through any other kind of reference) are called strongly referenced. These objects are strongly held by program i.e. in use and hence can not be claimed by GC (Garbage Collector) for memory requirement.

How does Java Manage the Memory

Understanding the Java memory management system is quite important to develop the memory sensitive applications. It also helps us to optimize the usage of memory in our programs. Java maintains a stack to store all object references whichever are being in use by program. Objects actually stores in memory heap and their references are maintained on memory stack.  

Let us try to understand it with some example description. This is not what exactly JVM does, but an example only to simplify the definitions. 

As soon as we create an object in program, its information is being saved to memory with some fixed byte pattern. Now we can use the start of memory location as reference id for this object. In program, there are various kind of scopes defined by Java. These are like code block scope, method level scope, class level scope, package scope and whole program level scope etc.  These scopes generally has parent <> child <> sibling relations with each other. Now as soon as the program scope initialize, a corresponding scope data storage structure (data structure to save the scope variable and other data which will have the memory references of the actual objects in memory) can be made and pushed to memory stack. Similarly other scope structures can be made as soon as they come in existence and can be stored with their parent scope. These scope data structures remain on stack till the corresponding scope is active in program. As soon as, it gets deactivated; the corresponding data structure will be removed from stack. Take it like as program thread enters into a method, we create a scope data structure for method scope and push it to stack with its parent scope which should be class scope. Now as program thread leaves the method, we remove the corresponding scope data from the stack. Scope can interact with each other as per the language protocol because they have parent <> child relationship. This is a simplified version of memory stack with JVM. Now you can visualize scope data structures used to be created or destroyed with the activation or deactivation of corresponding program scope. 

What It means to be a Project Manager

Working as a Project Manager brought a big change in the thinking and work responsibilities. Earlier the focus was on performing any work in best possible manner as an individual, and now the focus is on getting the work done from team in best possible manner. It is a complete shift in paradigm in term of work, daily routine, work planning and thinking. This experience is not entirely new. Everyone used to manage many things while working with a team (even while working as individual contributor). As you gather more experience, you usually manage other junior members of team for their work either technically or from delivery point of view. But the major difference is that now you are focusing more on management and your are liable for work of a group of people, not only for your work. You focus shift from being an individual contributor, to a team mentor or manager (or both), from core development to more broader terms like:
  • Project Planning and Execution
  • Project Scope Management 
  • Project Time and Cost Management
  • Delivery Management 
  • Risk Management
  • Communication Management
  • Resource Planning
  • People Management 
  • Team Building, Mentoring and Recruitment
  • And sometime Procurement Management
These are the traditional work which comes by default in responsibility set of a Project Manager and hence I got these as gift with new job responsibilities. But there are more to add in this list, which is specific to work place requirement and are giving more enriching experience, these are: