Constructor in Java

  • Constructors are fundamental and special methods in Java as they facilitate the initialization of objects.
  • They play a crucial role in defining how objects are created and initialized within a class hierarchy.
  • They initialize the newly created object with default values or values provided as arguments.
  • Constructors have the same name as the class and do not have a return type, not even void.
  • Constructor is called automatically when an object is created using the new keyword.
  • The purpose of a constructor is to ensure that the object is properly initialized with the desired initial state.
  • Constructors can be overloaded, i.e., a class can have multiple constructors with different parameters. This allows for different ways to create objects of the class based on the provided arguments.
  • Like C++, Java also shows different types of constructors, i.e., Default Constructors, Parameterized Constructors, Copy Constructors, etc.

Garbage Collection in Java

  • Garbage collection in Java is an automatic process that manages the memory allocation and deallocation of objects.
  • Garbage collection frees up memory by the Java Virtual Machine (JVM) automatically by reclaiming objects that are no longer needed/used or an object which is no longer referenced by any variables or reachable from any part of the program. The garbage collector identifies no-use objects that are unreachable and releases the memory occupied by those objects.
  • Garbage collection frees up memory occupied by objects that are no longer needed, allowing it to be reused for future object allocations.
  • Java’s garbage collection mechanism relieves developers from manually managing memory and deallocating objects. It helps prevent memory leaks and makes the memory management process more efficient.
  • The garbage collector works by analyzing the reachability of objects. If an object is no longer reachable from any active part of the program (e.g., no references exist to it), it is considered eligible for garbage collection.
  • The garbage collector periodically runs in the background, identifying and collecting such objects, and deallocating their memory.
  • While the specific algorithms and strategies used by the garbage collector may vary across different Java implementations, the core principle remains the same: automatically freeing up memory from objects that are no longer needed.
  • There is no direct control over the garbage collection process. However, a developer can use the garbage collector manually to perform garbage collection by calling the System.gc() method, though its execution is not guaranteed immediately.
  • Overall, Java’s garbage collection mechanism simplifies memory management and helps ensure efficient memory utilization in Java programs.
  • In Java, the JVM has a built-in garbage collector that periodically runs in the background, identifying and reclaiming unused memory.
  • In Java, developers don’t need to manually deallocate memory or explicitly destroy objects.
  • The JVM decides when and how to perform the garbage collection process based on its algorithms and memory management strategies. Thus, we can say that garbage collection relies solely on the garbage collector to free up resources.
  • Garbage collection may not be sufficient for certain types of resources, such as file handles or database connections. In such cases, it’s good practice to explicitly release these resources using some in-built garbage collector methods when they are no longer needed using appropriate methods like close() or dispose().
  • There is no direct control over the garbage collection process in Java, the developer can use the JVM’s in-built methods to run the garbage collector using the System.gc() or Runtime.getRuntime().gc() method. 
  • Finalize() Methods:
    • The finalize() method is a special method that is part of the object’s life cycle in Java and C# and is used for performing cleanup operations on an object before it is garbage collected.
    • The finalize() method is called by the garbage collector before reclaiming the memory occupied by an object that has no more references pointing to it.
    • In Java, it’s defined as –
protected void finalize() throws Throwable
    {
        // cleanup code
    }
    • There is no guarantee of when finalize() will be called or if it will be called at all. It depends on the garbage collector’s algorithm and is not recommended for critical cleanup tasks.
    • In Java, the finalize() method has been deprecated in Java 9, indicating that it’s considered a less reliable way of releasing resources. Now there is the use of explicit resource management and implementation AutoCloseable interfaces for better control over resources.
    • Modern languages (Java & C#)and best practices recommend explicit resource management and the use of language-specific constructs for reliable resource cleanup.
    • Example-
class ClassName
{
      protected void finalize() throws Throwable
        {
            // Cleanup code (e.g., releasing resources)
            super.finalize();            // Call superclass finalize() if necessary
        }
}

Loading

Categories: Java

0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.