This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-jbang-examples.git
commit 2a644774b6abbe5f8f4aeb5139d1994b05204ad1 Author: Claus Ibsen <[email protected]> AuthorDate: Thu Jul 2 09:38:51 2026 +0200 Use named class for one leak in memory-leak example Co-Authored-By: Claude <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- memory-leak/MemoryLeak.java | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/memory-leak/MemoryLeak.java b/memory-leak/MemoryLeak.java index 2ce67a6..c73687a 100644 --- a/memory-leak/MemoryLeak.java +++ b/memory-leak/MemoryLeak.java @@ -3,17 +3,18 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; public class MemoryLeak extends RouteBuilder { - // these collections grow forever — simulating a memory leak + // this collection grows forever — simulating a memory leak private final Map<String, byte[]> cache = new HashMap<>(); - private final List<byte[]> buffers = new ArrayList<>(); @Override public void configure() { - // leak 1: growing cache — adds a 64 KB entry every 200ms, never evicts + // leak 1: growing cache (lambda) — adds a 64 KB entry every 200ms, never evicts from("timer:cache-leak?period=200") .process(e -> { String key = "entry-" + cache.size(); @@ -23,13 +24,9 @@ public class MemoryLeak extends RouteBuilder { }) .to("log:cache-leak?level=INFO"); - // leak 2: growing buffer list — adds a 32 KB buffer every 300ms + // leak 2: growing buffer list (named class) — adds a 32 KB buffer every 300ms from("timer:buffer-leak?period=300") - .process(e -> { - buffers.add(new byte[32768]); - e.getMessage().setBody("Buffers: " + buffers.size() - + " (~" + (buffers.size() * 32) + " KB)"); - }) + .process(new BufferLeakProcessor()) .to("log:buffer-leak?level=INFO"); // normal route for comparison — no leak @@ -38,3 +35,15 @@ public class MemoryLeak extends RouteBuilder { .to("log:healthy?level=INFO"); } } + +class BufferLeakProcessor implements Processor { + + private final List<byte[]> buffers = new ArrayList<>(); + + @Override + public void process(Exchange exchange) { + buffers.add(new byte[32768]); + exchange.getMessage().setBody("Buffers: " + buffers.size() + + " (~" + (buffers.size() * 32) + " KB)"); + } +}
