memoizeit
Changes
pom.xml 7(+3 -4)
Details
pom.xml 7(+3 -4)
diff --git a/pom.xml b/pom.xml
index 49d20a0..332e50f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,11 +17,10 @@
<artifactId>Trace</artifactId>
<version>1.0</version>
</dependency>
- <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
- <groupId>com.google.code.gson</groupId>
- <artifactId>gson</artifactId>
- <version>2.8.5</version>
+ <groupId>br.ufrgs.inf.prosoft.cache</groupId>
+ <artifactId>Cache</artifactId>
+ <version>1.0</version>
</dependency>
</dependencies>
<build>
diff --git a/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/Main.java b/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/Main.java
index 2d32a79..fc4091c 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/Main.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/Main.java
@@ -19,7 +19,7 @@ import java.util.logging.Logger;
*/
public class Main {
- private static final Logger logger = Logger.getLogger(Main.class.getName());
+ private static final Logger LOGGER = Logger.getLogger(Main.class.getName());
public static void main(String[] args) {
System.setProperty("java.util.logging.SimpleFormatter.format", "[%1$tF %1$tT+%1$tL] [%4$-7s] [MemoizeIt] %5$s %n");
@@ -33,11 +33,11 @@ public class Main {
tracePath = args[0];
callGraphPath = args[1];
}
- logger.log(Level.INFO, "Reading callgraph");
+ LOGGER.log(Level.INFO, "Reading callgraph");
Graph<String> graph = CallGraphReader.parseFile(callGraphPath);
- logger.log(Level.INFO, "Reading traces");
+ LOGGER.log(Level.INFO, "Reading traces");
List<Trace> traces = TraceReader.partiallyParseFile(tracePath);
- logger.log(Level.INFO, "Grouping methods");
+ LOGGER.log(Level.INFO, "Grouping methods");
List<Method> methods = TraceReader.groupByMethods(traces);
MemoizeIt memoizeIt = new MemoizeIt();
memoizeIt.setCallGraph(graph);
diff --git a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/MemoizeIt.java b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/MemoizeIt.java
index 5494b56..02fa5ae 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/MemoizeIt.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/MemoizeIt.java
@@ -5,7 +5,7 @@
*/
package br.ufrgs.inf.prosoft.memoizeit;
-import br.ufrgs.inf.prosoft.memoizeit.cache.CachingPerformance;
+import br.ufrgs.inf.prosoft.cache.CachePerformance;
import br.ufrgs.inf.prosoft.memoizeit.graph.Graph;
import br.ufrgs.inf.prosoft.memoizeit.graph.Node;
import java.util.ArrayList;
@@ -92,8 +92,7 @@ public class MemoizeIt {
int i = 0;
while (i < this.methods.size()) {
Method method = this.methods.get(i);
- double totalExecutionTime = method.getTotalExecutionTime();
- double averageExecutionTime = totalExecutionTime / method.getOccurrencesSize();
+ double averageExecutionTime = method.getAverageExecutionTime();
if (method.getOccurrencesSize() < this.minimumMethodCalls || averageExecutionTime < this.minimumExecutionTime) {
this.methods.remove(method);
continue;
@@ -299,32 +298,32 @@ public class MemoizeIt {
}
private void suggestImplementation(Method method) {
- Map<String, CachingPerformance> cachingStrategyHasPerformance = method.simulateCachingStrategies();
- CachingPerformance globalMultiCachePerformance = cachingStrategyHasPerformance.get("globalMultiCache");
- CachingPerformance globalSingleCachePerformance = cachingStrategyHasPerformance.get("globalSingleCache");
- CachingPerformance instanceMultiCachePerformance = cachingStrategyHasPerformance.get("instanceMultiCache");
- CachingPerformance instanceSingleCachePerformance = cachingStrategyHasPerformance.get("instanceSingleCache");
+ Map<String, CachePerformance> cachingStrategyHasPerformance = method.simulateCachingStrategies();
+ CachePerformance globalMultiCachePerformance = cachingStrategyHasPerformance.get("globalMultiCache");
+ CachePerformance globalSingleCachePerformance = cachingStrategyHasPerformance.get("globalSingleCache");
+ CachePerformance instanceMultiCachePerformance = cachingStrategyHasPerformance.get("instanceMultiCache");
+ CachePerformance instanceSingleCachePerformance = cachingStrategyHasPerformance.get("instanceSingleCache");
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("GS: ");
- stringBuilder.append("R").append(globalSingleCachePerformance.getHitRatio());
+ stringBuilder.append("R").append(globalSingleCachePerformance.getRoundedHitRatio());
stringBuilder.append(" * ").append(globalSingleCachePerformance);
stringBuilder.append(" | IS: ");
- stringBuilder.append("R").append(instanceSingleCachePerformance.getHitRatio());
+ stringBuilder.append("R").append(instanceSingleCachePerformance.getRoundedHitRatio());
stringBuilder.append(" * ").append(instanceSingleCachePerformance);
stringBuilder.append(" | GM: ");
- stringBuilder.append("R").append(globalMultiCachePerformance.getHitRatio());
+ stringBuilder.append("R").append(globalMultiCachePerformance.getRoundedHitRatio());
stringBuilder.append(" * ").append(globalMultiCachePerformance);
stringBuilder.append(" | IM: ");
- stringBuilder.append("R").append(instanceMultiCachePerformance.getHitRatio());
+ stringBuilder.append("R").append(instanceMultiCachePerformance.getRoundedHitRatio());
stringBuilder.append(" * ").append(instanceMultiCachePerformance);
System.out.println(stringBuilder);
- if (globalSingleCachePerformance.getHitRatio() >= 50) {
+ if (globalSingleCachePerformance.getRoundedHitRatio() >= 50) {
System.out.println("single, global");
- } else if (instanceSingleCachePerformance.getHitRatio() >= 50) {
+ } else if (instanceSingleCachePerformance.getRoundedHitRatio() >= 50) {
System.out.println("single, instance");
- } else if (globalMultiCachePerformance.getHitRatio() >= 50) {
+ } else if (globalMultiCachePerformance.getRoundedHitRatio() >= 50) {
System.out.println("multi, global");
- } else if (instanceMultiCachePerformance.getHitRatio() >= 50) {
+ } else if (instanceMultiCachePerformance.getRoundedHitRatio() >= 50) {
System.out.println("multi, instance");
} else {
System.out.println("none");
diff --git a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Method.java b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Method.java
index 1f9dba9..5f406b7 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Method.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Method.java
@@ -5,9 +5,9 @@
*/
package br.ufrgs.inf.prosoft.memoizeit;
-import br.ufrgs.inf.prosoft.memoizeit.cache.CachingPerformance;
-import br.ufrgs.inf.prosoft.memoizeit.cache.MultiCache;
-import br.ufrgs.inf.prosoft.memoizeit.cache.SingleCache;
+import br.ufrgs.inf.prosoft.cache.CachePerformance;
+import br.ufrgs.inf.prosoft.cache.MultiCache;
+import br.ufrgs.inf.prosoft.cache.SingleCache;
import br.ufrgs.inf.prosoft.memoizeit.graph.Node;
import java.util.ArrayList;
import java.util.HashMap;
@@ -86,10 +86,13 @@ public class Method {
@Override
public void accept(Occurrence occurrence) {
- System.out.print(".");
- System.out.flush();
- if (++i % 100 == 0) {
- System.out.println();
+ String verbose = System.getenv("TRACER_VERBOSE");
+ if (verbose != null && verbose.equals("true")) {
+ System.out.print(".");
+ System.out.flush();
+ if (++i % 100 == 0) {
+ System.out.println();
+ }
}
if (depth < Integer.MAX_VALUE) {
OccurrenceConcrete thisOccurrence = occurrence.getConcrete();
@@ -116,12 +119,12 @@ public class Method {
}
protected boolean isChangeful() {
- for (Map.Entry<String, List<Occurrence>> entry : this.groupByParameter.entrySet()) {
- if (entry.getValue().size() == 1) {
+ for (List<Occurrence> occurrences : this.groupByParameter.values()) {
+ if (occurrences.size() == 1) {
continue;
}
- Occurrence firstOccurrence = entry.getValue().get(0);
- if (entry.getValue().stream()
+ Occurrence firstOccurrence = occurrences.get(0);
+ if (occurrences.stream()
.anyMatch(occurrence -> occurrence.getReturnValue() != null
&& !occurrence.getReturnValue().equals(firstOccurrence.getReturnValue()))) {
return true;
@@ -148,9 +151,12 @@ public class Method {
@Override
public void accept(Occurrence occurrence) {
- System.out.print(".");
- if (i++ % 100 == 0) {
- System.out.println();
+ String verbose = System.getenv("TRACER_VERBOSE");
+ if (verbose != null && verbose.equals("true")) {
+ System.out.print(".");
+ if (i++ % 100 == 0) {
+ System.out.println();
+ }
}
occurrence.removeUnusedFields(methodNode);
}
@@ -158,12 +164,12 @@ public class Method {
System.out.println();
}
- protected Map<String, CachingPerformance> simulateCachingStrategies() {
- Map<String, CachingPerformance> cachingStrategyHasPerformance = new HashMap<>();
- CachingPerformance globalMultiCachePerformance = new CachingPerformance();
- CachingPerformance globalSingleCachePerformance = new CachingPerformance();
- CachingPerformance instanceMultiCachePerformance = new CachingPerformance();
- CachingPerformance instanceSingleCachePerformance = new CachingPerformance();
+ protected Map<String, CachePerformance> simulateCachingStrategies() {
+ Map<String, CachePerformance> cachingStrategyHasPerformance = new HashMap<>();
+ CachePerformance globalMultiCachePerformance = new CachePerformance();
+ CachePerformance globalSingleCachePerformance = new CachePerformance();
+ CachePerformance instanceMultiCachePerformance = new CachePerformance();
+ CachePerformance instanceSingleCachePerformance = new CachePerformance();
cachingStrategyHasPerformance.put("globalMultiCache", globalMultiCachePerformance);
cachingStrategyHasPerformance.put("globalSingleCache", globalSingleCachePerformance);
cachingStrategyHasPerformance.put("instanceMultiCache", instanceMultiCachePerformance);
diff --git a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Occurrence.java b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Occurrence.java
index 27fd05f..4ad3877 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Occurrence.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/Occurrence.java
@@ -5,7 +5,7 @@
*/
package br.ufrgs.inf.prosoft.memoizeit;
-import br.ufrgs.inf.prosoft.memoizeit.cache.Cache;
+import br.ufrgs.inf.prosoft.cache.Cache;
import br.ufrgs.inf.prosoft.memoizeit.graph.Node;
import java.util.List;
diff --git a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/utils/ObjectUtils.java b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/utils/ObjectUtils.java
index c2493ff..a7e585b 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/utils/ObjectUtils.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/utils/ObjectUtils.java
@@ -46,19 +46,17 @@ public class ObjectUtils {
public static List<Object> deepCopy(List<Object> object) {
List<Object> collection = new ArrayList<>();
- object.forEach((item) -> {
+ object.forEach(item -> {
collection.add(deepCopy(item));
});
return collection;
}
public static Object deepCopy(Object object) {
- try {
- try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream)) {
- objectOutputStream.writeObject(object);
- try (ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); ObjectInputStream objectInputStream = new ObjectInputStream(inputStream)) {
- return objectInputStream.readObject();
- }
+ try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream)) {
+ objectOutputStream.writeObject(object);
+ try (ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); ObjectInputStream objectInputStream = new ObjectInputStream(inputStream)) {
+ return objectInputStream.readObject();
}
} catch (IOException | ClassNotFoundException ex) {
System.err.println("[MemoizeIt] clone exception: " + ex);