If we have an Object like this
object Repo { var activeMovies: ArrayList<Movie>? = null }
and then we call it like this to assign a value
Repo.activeMovies = movieList
after the Activity that instantiated it is finish, does it get Garbage Collected?
I know this may be very basic question but I cannot understand the lifecycle if the object
type in Kotlin.
Kotlin is run in JVM so it uses the same garbage collector as Java or any other JVM based language.
An object is eligible to be garbage collected if its reference variable is lost from the program during execution. Sometimes they are also called unreachable objects. What is reference of an object? The new operator dynamically allocates memory for an object and returns a reference to it.
When an object created in Java program is no longer reachable or used it is eligible for garbage collection.
Objective C for the iPhone is not garbage collected, but uses retain counting memory management.
If we create an object like this:
object Test {
// some functions and properties
}
and decompile it to Java, we will see next code:
public final class Test {
public static final Test INSTANCE;
static {
Test var0 = new Test();
INSTANCE = var0;
}
}
From the decompiled code, we can see that object
creates a Singleton. The initialization happens on a static block. In Java, static blocks are executed on class loading time. The instance of Test
class is created at the moment when the classloader loads the class. This approach guarantees lazy-loading and thread-safety. An instance of a singleton object is kept in a static field inside the class of that object. Therefore it isn’t eligible to the garbage collection. The Test
is a Singleton, whose lifespan is as long as the lifespan of an app.
Here are some useful information about static variables Android static object lifecycle and static variable null when returning to the app.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With