diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcNumberOfPackFilesSinceBitmapStatisticsTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcSinceBitmapStatisticsTest.java
similarity index 54%
rename from org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcNumberOfPackFilesSinceBitmapStatisticsTest.java
rename to org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcSinceBitmapStatisticsTest.java
index fa13bb57c8eea4335c6f50bf111a75ad8cf98330..3cd766c4e91de3e2e3aebf445e91e664b490af16 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcNumberOfPackFilesSinceBitmapStatisticsTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcSinceBitmapStatisticsTest.java
@@ -14,17 +14,21 @@
 
 import java.io.IOException;
 import java.nio.file.Files;
+import java.util.Collection;
 import java.util.stream.StreamSupport;
 
+import org.eclipse.jgit.internal.storage.file.GC.RepoStatistics;
 import org.eclipse.jgit.lib.PersonIdent;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.junit.Test;
 
-public class GcNumberOfPackFilesSinceBitmapStatisticsTest extends GcTestCase {
+public class GcSinceBitmapStatisticsTest extends GcTestCase {
 	@Test
-	public void testShouldReportZeroObjectsForInitializedRepo()
+	public void testShouldReportZeroPacksAndObjectsForInitializedRepo()
 			throws IOException {
-		assertEquals(0L, gc.getStatistics().numberOfPackFilesSinceBitmap);
+		RepoStatistics s = gc.getStatistics();
+		assertEquals(0L, s.numberOfPackFilesSinceBitmap);
+		assertEquals(0L, s.numberOfObjectsSinceBitmap);
 	}
 
 	@Test
@@ -37,7 +41,17 @@ public void testShouldReportAllPackFilesWhenNoGcWasPerformed()
 	}
 
 	@Test
-	public void testShouldReportNoObjectsDirectlyAfterGc() throws Exception {
+	public void testShouldReportAllObjectsWhenNoGcWasPerformed()
+			throws Exception {
+		tr.packAndPrune();
+
+		assertEquals(
+				getNumberOfObjectsInPacks(repo.getObjectDatabase().getPacks()),
+				gc.getStatistics().numberOfObjectsSinceBitmap);
+	}
+
+	@Test
+	public void testShouldReportNoPacksDirectlyAfterGc() throws Exception {
 		// given
 		addCommit(null);
 		gc.gc().get();
@@ -46,7 +60,17 @@ public void testShouldReportNoObjectsDirectlyAfterGc() throws Exception {
 	}
 
 	@Test
-	public void testShouldReportNewObjectsSinceGcWhenRepositoryProgresses()
+	public void testShouldReportNoObjectsDirectlyAfterGc() throws Exception {
+		// given
+		addCommit(null);
+		assertEquals(2L, gc.getStatistics().numberOfObjectsSinceBitmap);
+
+		gc.gc().get();
+		assertEquals(0L, gc.getStatistics().numberOfObjectsSinceBitmap);
+	}
+
+	@Test
+	public void testShouldReportNewPacksSinceGcWhenRepositoryProgresses()
 			throws Exception {
 		// commit & gc
 		RevCommit parent = addCommit(null);
@@ -61,7 +85,23 @@ public void testShouldReportNewObjectsSinceGcWhenRepositoryProgresses()
 	}
 
 	@Test
-	public void testShouldReportNewObjectsFromTheLatestBitmapWhenRepositoryProgresses()
+	public void testShouldReportNewObjectsSinceGcWhenRepositoryProgresses()
+			throws Exception {
+		// commit & gc
+		RevCommit parent = addCommit(null);
+		gc.gc().get();
+		assertEquals(0L, gc.getStatistics().numberOfObjectsSinceBitmap);
+
+		// progress & pack
+		addCommit(parent);
+		assertEquals(1L, gc.getStatistics().numberOfObjectsSinceBitmap);
+
+		tr.packAndPrune();
+		assertEquals(3L, gc.getStatistics().numberOfObjectsSinceBitmap);
+	}
+
+	@Test
+	public void testShouldReportNewPacksFromTheLatestBitmapWhenRepositoryProgresses()
 			throws Exception {
 		// commit & gc
 		RevCommit parent = addCommit(null);
@@ -80,6 +120,26 @@ public void testShouldReportNewObjectsFromTheLatestBitmapWhenRepositoryProgresse
 		assertEquals(1L, gc.getStatistics().numberOfPackFilesSinceBitmap);
 	}
 
+	@Test
+	public void testShouldReportNewObjectsFromTheLatestBitmapWhenRepositoryProgresses()
+			throws Exception {
+		// commit & gc
+		RevCommit parent = addCommit(null);
+		gc.gc().get();
+
+		// progress & gc
+		parent = addCommit(parent);
+		gc.gc().get();
+		assertEquals(0L, gc.getStatistics().numberOfObjectsSinceBitmap);
+
+		// progress & pack
+		addCommit(parent);
+		assertEquals(1L, gc.getStatistics().numberOfObjectsSinceBitmap);
+
+		tr.packAndPrune();
+		assertEquals(4L, gc.getStatistics().numberOfObjectsSinceBitmap);
+	}
+
 	private RevCommit addCommit(RevCommit parent) throws Exception {
 		return tr.branch("master").commit()
 				.author(new PersonIdent("repo-metrics", "repo@metrics.com"))
@@ -94,4 +154,14 @@ private long repositoryBitmapFiles() throws IOException {
 						.spliterator(), false)
 				.count();
 	}
+
+	private long getNumberOfObjectsInPacks(Collection<Pack> packs) {
+		return packs.stream().mapToLong(pack -> {
+			try {
+				return pack.getObjectCount();
+			} catch (IOException e) {
+				throw new RuntimeException(e);
+			}
+		}).sum();
+	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java
index 9494057a608090eece56ff8b3969c4be0eafdfe8..b33afed1312fe892a90b168d91f9786fdd0fdda0 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java
@@ -1514,6 +1514,12 @@ public static class RepoStatistics {
 		 */
 		public long numberOfPackFilesSinceBitmap;
 
+		/**
+		 * The number of objects stored in pack files and as loose object
+		 * created after the last bitmap generation.
+		 */
+		public long numberOfObjectsSinceBitmap;
+
 		/**
 		 * The number of objects stored as loose objects.
 		 */
@@ -1551,6 +1557,8 @@ public String toString() {
 			b.append(", numberOfPackFiles=").append(numberOfPackFiles); //$NON-NLS-1$
 			b.append(", numberOfPackFilesSinceBitmap=") //$NON-NLS-1$
 					.append(numberOfPackFilesSinceBitmap);
+			b.append(", numberOfObjectsSinceBitmap=") //$NON-NLS-1$
+					.append(numberOfObjectsSinceBitmap);
 			b.append(", numberOfLooseObjects=").append(numberOfLooseObjects); //$NON-NLS-1$
 			b.append(", numberOfLooseRefs=").append(numberOfLooseRefs); //$NON-NLS-1$
 			b.append(", numberOfPackedRefs=").append(numberOfPackedRefs); //$NON-NLS-1$
@@ -1571,14 +1579,19 @@ public String toString() {
 	public RepoStatistics getStatistics() throws IOException {
 		RepoStatistics ret = new RepoStatistics();
 		Collection<Pack> packs = repo.getObjectDatabase().getPacks();
+		long latestBitmapTime = Long.MIN_VALUE;
 		for (Pack p : packs) {
-			ret.numberOfPackedObjects += p.getIndex().getObjectCount();
+			long packedObjects = p.getIndex().getObjectCount();
+			ret.numberOfPackedObjects += packedObjects;
 			ret.numberOfPackFiles++;
 			ret.sizeOfPackedObjects += p.getPackFile().length();
 			if (p.getBitmapIndex() != null) {
 				ret.numberOfBitmaps += p.getBitmapIndex().getBitmapCount();
+				latestBitmapTime = p.getFileSnapshot().lastModifiedInstant()
+						.toEpochMilli();
 			} else {
 				ret.numberOfPackFilesSinceBitmap++;
+				ret.numberOfObjectsSinceBitmap += packedObjects;
 			}
 		}
 		File objDir = repo.getObjectsDirectory();
@@ -1595,6 +1608,9 @@ public RepoStatistics getStatistics() throws IOException {
 						continue;
 					ret.numberOfLooseObjects++;
 					ret.sizeOfLooseObjects += f.length();
+					if (f.lastModified() > latestBitmapTime) {
+						ret.numberOfObjectsSinceBitmap ++;
+					}
 				}
 			}
 		}