diff --git a/core-java-modules/core-java-jvm-2/pom.xml b/core-java-modules/core-java-jvm-2/pom.xml
index 08c8de75a9..b34aac5a78 100644
--- a/core-java-modules/core-java-jvm-2/pom.xml
+++ b/core-java-modules/core-java-jvm-2/pom.xml
@@ -26,11 +26,23 @@
jol-core
${jol-core.version}
+
+ org.reflections
+ reflections
+ ${reflections.version}
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
3.6.1
0.10
+ 0.10.2
+ 31.0.1-jre
-
\ No newline at end of file
+
diff --git a/core-java-modules/core-java-jvm-2/src/main/java/com/baeldung/loadedclasslisting/ListLoadedClass.java b/core-java-modules/core-java-jvm-2/src/main/java/com/baeldung/loadedclasslisting/ListLoadedClass.java
new file mode 100644
index 0000000000..b4a290e70d
--- /dev/null
+++ b/core-java-modules/core-java-jvm-2/src/main/java/com/baeldung/loadedclasslisting/ListLoadedClass.java
@@ -0,0 +1,35 @@
+package com.baeldung.loadedclasslisting;
+
+import java.io.IOException;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.reflections.Reflections;
+import org.reflections.scanners.SubTypesScanner;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.reflect.ClassPath;
+import com.google.common.reflect.ClassPath.ClassInfo;
+
+public class ListLoadedClass {
+
+ public ImmutableSet listClassLoaded() throws IOException {
+ return ClassPath.from(ListLoadedClass.class.getClassLoader())
+ .getAllClasses();
+ }
+
+ public Set listClassLoaded(String packageName) throws IOException {
+ return ClassPath.from(ClassLoader.getSystemClassLoader()).getAllClasses().stream()
+ .filter(clazz -> clazz.getPackageName().equals(packageName))
+ .map(ClassInfo::load)
+ .collect(Collectors.toSet());
+ }
+
+ public Set findAllClassesUsingReflectionsLibrary(String packageName) {
+ Reflections reflections = new Reflections(packageName, new SubTypesScanner(false));
+ return reflections.getSubTypesOf(Object.class)
+ .stream()
+ .collect(Collectors.toSet());
+ }
+
+}
diff --git a/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/loadedclasslisting/ListLoadedClassUnitTest.java b/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/loadedclasslisting/ListLoadedClassUnitTest.java
new file mode 100644
index 0000000000..c3e29b27b6
--- /dev/null
+++ b/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/loadedclasslisting/ListLoadedClassUnitTest.java
@@ -0,0 +1,41 @@
+package com.baeldung.loadedclasslisting;
+
+import java.io.IOException;
+import java.util.Set;
+
+import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+
+import com.baeldung.loadedclasslisting.ListLoadedClass;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.reflect.ClassPath;
+import com.google.common.reflect.ClassPath.ClassInfo;
+
+public class ListLoadedClassUnitTest {
+
+ private static final String PACKAGE_NAME = "com.baeldung.loadedclasslisting";
+
+ @Test
+ public void when_findAllClassesUsingReflectionsLibrary_thenSuccess() {
+ ListLoadedClass instance = new ListLoadedClass();
+ Set classes = instance.findAllClassesUsingReflectionsLibrary(PACKAGE_NAME);
+
+ Assertions.assertEquals(4, classes.size());
+ }
+
+ @Test
+ public void when_findAllClassesUsingGuavaLibrary_InPackage_thenSuccess() throws IOException {
+ ListLoadedClass instance = new ListLoadedClass();
+ Set classes = instance.listClassLoaded(PACKAGE_NAME);
+
+ Assertions.assertEquals(4, classes.size());
+ }
+
+ @Test
+ public void when_findAllClassesUsingGuavaLibrary_thenSuccess() throws IOException {
+ ListLoadedClass instance = new ListLoadedClass();
+ Set classes = instance.listClassLoaded();
+
+ Assertions.assertTrue(4