From 3680ae48e2f2c3c7e0d5e13a506aea7e41a5e1af Mon Sep 17 00:00:00 2001 From: Nelson Osacky Date: Thu, 2 Jul 2026 18:49:32 +0200 Subject: [PATCH] perf(core): Skip Hint allocation in addBreadcrumb (JAVA-605) Only allocate a Hint when a beforeBreadcrumb callback is set. addBreadcrumb previously allocated a Hint (HashMap + ArrayList + lock) on every call even though the Hint is only ever passed to the callback, wasting allocations on the common no-callback path. Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 6 ++++++ sentry/src/main/java/io/sentry/Scope.java | 7 +++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a290e2b3e..70751cdde9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Performance + +- Skip `Hint` allocation in `Scope.addBreadcrumb` when no `beforeBreadcrumb` callback is set ([#5689](https://github.com/getsentry/sentry-java/pull/5689)) + ## 8.47.0 ### Behavioral Changes diff --git a/sentry/src/main/java/io/sentry/Scope.java b/sentry/src/main/java/io/sentry/Scope.java index 282fc4df67..f5c57f5ac5 100644 --- a/sentry/src/main/java/io/sentry/Scope.java +++ b/sentry/src/main/java/io/sentry/Scope.java @@ -493,12 +493,11 @@ public void addBreadcrumb(@NotNull Breadcrumb breadcrumb, @Nullable Hint hint) { if (breadcrumb == null || breadcrumbs instanceof DisabledQueue) { return; } - if (hint == null) { - hint = new Hint(); - } - SentryOptions.BeforeBreadcrumbCallback callback = options.getBeforeBreadcrumb(); if (callback != null) { + if (hint == null) { + hint = new Hint(); + } breadcrumb = executeBeforeBreadcrumb(callback, breadcrumb, hint); } if (breadcrumb != null) {