The classes loaded by Bootstrap Classloader

classloader, java

Solution

`Class` is the part of `java.lang` package and so the bootstrap class loader picks it up for loading, but `Class` itself requires some dependent framework classes like `List` or `Set`, so they are also loaded.

If you will see the code for `Class` in JDK you will find following imports

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.LinkedList;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.Map;
import java.util.HashMap;

`Class` source internally uses `Collections`, so it needs to be loaded.

Problem

This question is provoked by this post. When a simple program like the following is run ``` public class Sample { public static void main(String[] args) { } } ``` with options `-versbose:class`, it lists a bunch of classes before loading this class ``` [Opened C:\jdk1.6.0_14\jre\lib\rt.jar] [Loaded java.lang.Object from C:\jdk1.6.0_14\jre\lib\rt.jar] [Loaded java.io.Serializable from C:\jdk1.6.0_14\jre\lib\rt.jar] [Loaded java.lang.Comparable from C:\jdk1.6.0_14\jre\lib\rt.jar] . . . . . . [Loaded java.security.cert.Certificate from C:\jdk1.6.0_14\jre\lib\rt.jar] [Loaded Sample from file:/D:/tmp/] [Loaded java.lang.Shutdown from C:\jdk1.6.0_14\jre\lib\rt.jar] [Loaded java.lang.Shutdown$Lock from C:\jdk1.6.0_14\jre\lib\rt.jar] ``` My questions is, my program never needed classes like `java.util.Collection`, `Set` `List` and so on. Then why is Bootstrap classloader is loading them. Is this how JVM specs mandates or how Bootstrap classloader decides which classes to load ? EDIT: Another aspect: Even if you try to run a non existent class, the program ends with `ClassNotFoundException` but not without loading all the classes mentioned earlier. So the classes are loaded merely on invoking the JVM ! So JVM loads a set of classes by default but, what governs this behavior?

Original source

Related problems