From e639cd2304509ef1e6798e7659c22bcb06e294a4 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 23 Apr 2013 14:53:12 +0400 Subject: [PATCH] halve memory in interner --- .../util/containers/RecentStringInterner.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/platform/util/src/com/intellij/util/containers/RecentStringInterner.java b/platform/util/src/com/intellij/util/containers/RecentStringInterner.java index a06909384c2d..5019543eab50 100644 --- a/platform/util/src/com/intellij/util/containers/RecentStringInterner.java +++ b/platform/util/src/com/intellij/util/containers/RecentStringInterner.java @@ -1,7 +1,6 @@ package com.intellij.util.containers; import com.intellij.openapi.util.LowMemoryWatcher; -import com.intellij.util.containers.SLRUCache; import jsr166e.SequenceLock; import org.jetbrains.annotations.NotNull; @@ -24,6 +23,7 @@ public class RecentStringInterner { public RecentStringInterner(int capacity) { final int stripes = 16; + //noinspection unchecked myInterns = new SLRUCache[stripes]; myStripeLocks = new Lock[myInterns.length]; for(int i = 0; i < myInterns.length; ++i) { @@ -33,6 +33,26 @@ public class RecentStringInterner { public String createValue(String key) { return key; } + + @NotNull + @Override + public String get(String key) { + String value = myProtectedQueue.get(key); + if (value == null) { + value = myProbationalQueue.remove(key); + if (value != null) { + myProtectedQueue.put(value, value); + } + } + if (value != null) { + return value; + } + + value = key; + put(key, value); + + return value; + } }; myStripeLocks[i] = new SequenceLock(); } @@ -43,7 +63,7 @@ public class RecentStringInterner { @Override public void run() { clear(); - }; + } }); }