diff --git a/pdb-api/src/test/java/org/lucares/memory/MemoryScale.java b/pdb-api/src/test/java/org/lucares/memory/MemoryScale.java new file mode 100644 index 0000000..5e0cdfd --- /dev/null +++ b/pdb-api/src/test/java/org/lucares/memory/MemoryScale.java @@ -0,0 +1,89 @@ +package org.lucares.memory; + +import java.util.LinkedHashMap; +import java.util.Map; + +import org.lucares.utils.MiniMap; + +public class MemoryScale { + + public static final String A = "A"; + + public static void main(String[] args) { + System.out.println("start"); + // warmup of classes + getUsedMemory(); + Object handle =createObject(); + + handle = null; + + runGc(); + long memoryBefore = getUsedMemory(); + + handle = createObject(); + + runGc(); + long memoryAfter = getUsedMemory(); + System.out.println("used memory: " + (memoryAfter - memoryBefore)); + } + + private static Object createObject(){ + + String key = "minimap"; + switch (key) { + case "minimap": + return createMinimap(); + case "string": + return createString(); + case "linkedHashMap": + return createLinkedHashMap(); + default: + return null; + } + + } + + private static Object createMinimap() { + final MiniMap map = new MiniMap<>(); + + map.put("A", "A"); + for (int i = 0; i < 0; i++){ + map.put(""+i, ""+i); + } + + return map; + } + + private static String createString() { + + int i= 0; + return ""+i; + } + + private static Object createLinkedHashMap() { + final Map map = new LinkedHashMap<>(); + + map.put("A", "A"); + for (int i = 0; i < 0; i++){ + map.put(""+i, ""+i); + } + + return map; + } + + private static void runGc() { + for (int i = 0; i < 10; i++) { + System.gc(); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + } + + private static long getUsedMemory() { + return Runtime.getRuntime().totalMemory() + - Runtime.getRuntime().freeMemory(); + } +}