diff --git a/src/main/java/com/github/shyiko/mysql/binlog/event/LRUCache.java b/src/main/java/com/github/shyiko/mysql/binlog/event/LRUCache.java new file mode 100644 index 00000000..784cec0e --- /dev/null +++ b/src/main/java/com/github/shyiko/mysql/binlog/event/LRUCache.java @@ -0,0 +1,19 @@ +package com.github.shyiko.mysql.binlog.event; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class LRUCache extends LinkedHashMap { + private int maxSize; + + // and other constructors for load factor and hashtable capacity + public LRUCache(int initialCapacity, float loadFactor, int maxSize) { + super(initialCapacity, loadFactor, true); + this.maxSize = maxSize; + } + + @Override + protected boolean removeEldestEntry(Map.Entry eldest) { + return size() > maxSize; + } +} diff --git a/src/main/java/com/github/shyiko/mysql/binlog/event/deserialization/EventDeserializer.java b/src/main/java/com/github/shyiko/mysql/binlog/event/deserialization/EventDeserializer.java index 5ca3e692..d623d943 100644 --- a/src/main/java/com/github/shyiko/mysql/binlog/event/deserialization/EventDeserializer.java +++ b/src/main/java/com/github/shyiko/mysql/binlog/event/deserialization/EventDeserializer.java @@ -20,6 +20,7 @@ import com.github.shyiko.mysql.binlog.event.EventHeader; import com.github.shyiko.mysql.binlog.event.EventType; import com.github.shyiko.mysql.binlog.event.FormatDescriptionEventData; +import com.github.shyiko.mysql.binlog.event.LRUCache; import com.github.shyiko.mysql.binlog.event.TableMapEventData; import com.github.shyiko.mysql.binlog.io.ByteArrayInputStream; @@ -65,7 +66,7 @@ public EventDeserializer( this.eventHeaderDeserializer = eventHeaderDeserializer; this.defaultEventDataDeserializer = defaultEventDataDeserializer; this.eventDataDeserializers = new IdentityHashMap(); - this.tableMapEventByTableId = new HashMap(); + this.tableMapEventByTableId = new LRUCache<>(100, 0.75f, 10000); registerDefaultEventDataDeserializers(); afterEventDataDeserializerSet(null); }