I created a java agent class, that just uses java.lang.Instrumentation.getAllLoadedClasses() to retrieve an array of classes, over which I iterate, and print their full names.
I used this command to run this agent:
java -javaagent:<agent_jar> -jar <sample_jar>
<agent_jar>
contains my agent class, and <sample_jar>
just contains a class with an empty main method (since I have to pass some class/jar to the java
command)
So, basically, it printed all the default classes loaded by the JVM, and here's a snippet for class names containing 'String' and 'Object' in their names:
(Output format: Class.getName() - Class.getTypeName())
java.util.Objects - java.util.Objects
[Ljava.lang.String; - java.lang.String[]
java.lang.String$CaseInsensitiveComparator - java.lang.String$CaseInsensitiveComparator
[Ljava.io.ObjectStreamField; - java.io.ObjectStreamField[]
java.io.ObjectStreamField - java.io.ObjectStreamField
[Ljava.lang.Object; - java.lang.Object[]
java.lang.StringBuilder - java.lang.StringBuilder
java.lang.StringBuffer - java.lang.StringBuffer
java.lang.AbstractStringBuilder - java.lang.AbstractStringBuilder
java.lang.reflect.AccessibleObject - java.lang.reflect.AccessibleObject
java.lang.String - java.lang.String
java.lang.Object - java.lang.Object
Why are there array entries for many classes, eg. Object and Object[]?