cache

reduced memory consumption

7/28/2019 2:37:54 AM

Details

diff --git a/src/main/java/br/ufrgs/inf/prosoft/cache/tools/Reducer.java b/src/main/java/br/ufrgs/inf/prosoft/cache/tools/Reducer.java
index b6c1081..e6780e7 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/cache/tools/Reducer.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/cache/tools/Reducer.java
@@ -12,11 +12,10 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-import java.util.List;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 /**
@@ -30,14 +29,18 @@ public class Reducer {
     public static void reduce(String eventsPath, String reducePath, String prefix) {
         try (Stream<String> lines = Files.lines(Paths.get(eventsPath))) {
             Gson gson = new Gson();
-            List<CacheEvent> hits = lines.map(line -> gson.fromJson(line, CacheEvent.class))
-                    .filter(event -> event.getType().equals(EventType.HIT) || event.getType().equals(EventType.ADDITION) || event.getType().equals(EventType.MISS))
-                    .collect(Collectors.toList());
-
-            Map<String, Long> objectHasHits = hits.stream()
-                    .collect(Collectors.groupingBy(
-                            event -> event.getName() + "," + event.getIdentifier() + "," + event.getType().name().toLowerCase(),
-                            Collectors.counting()));
+            Map<String, Integer> objectHasHits = new HashMap<>();
+            lines.forEach(line -> {
+                CacheEvent event = gson.fromJson(line, CacheEvent.class);
+                if (event.getType().equals(EventType.HIT) || event.getType().equals(EventType.ADDITION) || event.getType().equals(EventType.MISS)) {
+                    String identifier = event.getName() + "," + event.getIdentifier() + "," + event.getType().name().toLowerCase();
+                    try {
+                        objectHasHits.put(identifier, objectHasHits.get(identifier) + 1);
+                    } catch (Exception ex) {
+                        objectHasHits.put(identifier, 1);
+                    }
+                }
+            });
 
             try (FileWriter fileWriter = new FileWriter(reducePath, true)) {
                 objectHasHits.entrySet().stream().forEach(entry -> {