Invoking Garbage Collection Programmatically – Object Lifetime

10.4 Invoking Garbage Collection Programmatically

Although Java provides facilities to invoke the garbage collector explicitly, there are no guarantees that it will be run. The program can request that garbage collection be performed, but there is no way to force garbage collection to be activated.

The System.gc() method can be used to request garbage collection.

static void gc()

Requests that garbage collection be run.

Alternatively, corresponding methods in the Runtime class can be used. A Java application has a unique Runtime object that can be used by the application to interact with the JVM. An application can obtain this object by calling the method Runtime.getRuntime(). The Runtime class provides several methods related to memory issues:

static Runtime getRuntime()

Returns the Runtime object associated with the current application.

void gc()

Requests that garbage collection be run. There are no guarantees that it will be run. It is recommended to use the more convenient static method System.gc().

long freeMemory()

Returns the amount of free memory (bytes) in the JVM that is available for new objects.

long totalMemory()

Returns the total amount of memory (bytes) available in the JVM, including both memory occupied by current objects and memory available for new objects.

The following points regarding automatic garbage collection should be noted:

  • Trying to initiate garbage collection programmatically does not guarantee that it will actually be run.
  • Garbage collection might not even be run if the program execution does not warrant it. Thus any memory allocated during program execution might remain allocated after program termination, but will eventually be reclaimed by the operating system.
  • There are also no guarantees about the order in which the objects will be garbage collected. Therefore, the program should not make any assumptions based on this criteria.
  • Garbage collection does not guarantee that there will be enough memory for the program to run. A program can rely on the garbage collector to run when memory gets very low, and it can expect an OutOfMemoryError to be thrown if its memory demands cannot be met.

Leave a Reply

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

The Diamond Operator

  • 10.4 Invoking Garbage Collection Programmatically Although Java provides facilities to invoke the garbage collector explicitly, there are no guarantees that it will be run. The program can request that garbage collection be performed, but there is no way to force garbage collection to be activated. The System.gc() method can be used to request garbage collection.…

  • 11.3 Collections and Generics Before the introduction of generics in Java 1.5, a collection in the Java Collections Framework could hold references to objects of any type. For example, any object which is an instance of the java.lang.Object class or its subclasses could be maintained in an instance of the java.util.ArrayList class, which implements the…

  • 10.8 Instance Initializer Blocks Just as static initializer blocks can be used to initialize static fields in a named class, Java provides the ability to initialize fields during object creation using instance initializer blocks. In this respect, such blocks serve the same purpose as constructors during object creation. The syntax of an instance initializer block…

  • Exception Handling in Static Initializer Blocks Exception handling in static initializer blocks is no different from that in static initializer expressions: Uncaught checked exceptions cannot be thrown. Code in initializers cannot throw checked exceptions. A static initializer block cannot be called directly. Therefore, any checked exceptions must be caught and handled in the body of…

  • Generic Interfaces Generic types also include generic interfaces, which are declared analogous to generic classes. The specification of formal type parameters in a generic interface is the same as in a generic class. Example 11.3 declares a generic interface that defines the reference type IMonoLink<E> for objects that store a data value of type E.…

  • 11.1 Introducing Generics Generics allow classes and interfaces, as well as methods and constructors, to be parameterized with type information. An abstract data type (ADT) defines both the types of objects and the operations that can be performed on these objects. Generics allow us to specify the types used by the ADT so that the…

  • The Diamond Operator (<>) In the object creation expression of the new operator, the actual type parameter was explicitly specified after the class name—in contrast to the constructor declaration. Click here to view code image Node<String> lst = new Node<String>(“Hi”, null); // Explicit actual type parameter The actual type parameters can be omitted, but not…

  • Parameterized Types A parameterized type (also called a type instance) is an invocation or instantiation of a generic type that is a specific usage of the generic type where the formal type parameters are replaced by actual type parameters. Analogy with method declarations and method invocations can be helpful in understanding the relationship between generic…

  • Some Restrictions on Wildcard Types Wildcards cannot be used in instance creation expressions: Click here to view code image Node<?> anyNode = new Node<?>(2020, null);                 // Compile-time error!Node<? extends Integer> extIntNodeA               = new Node<? extends Integer>(0, null);     // Compile-time error!Node<? extends Integer> extIntNodeB = new Node<Integer>(0, null);  // OK The actual type parameter in the…

  • 10.9 Constructing Initial Object State Object initialization involves constructing the initial state of an object when it is created by the new operator. First the fields are initialized to their default values (§3.4, p.103)—whether they are subsequently given non-default initial values or not—and then the constructor is invoked. This can lead to local chaining of…