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)");
+    }
+}

Reply via email to