1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 197989: Use limited LRU caches instead of the unlimited ones.

This commit is contained in:
Markus Schorn 2011-11-03 16:11:22 +01:00
parent 0fb12d7d56
commit 87c046746f
2 changed files with 36 additions and 3 deletions

View file

@ -0,0 +1,32 @@
/*******************************************************************************
* Copyright (c) 2011 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Markus Schorn - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.core.parser.util;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
/**
* LRUCache based on {@link LinkedHashMap}.
*/
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
private int fLimit;
public LRUCache(int limit) {
super(16, 0.75f, true);
fLimit= limit;
}
@Override
protected boolean removeEldestEntry(Entry<K, V> eldest) {
return size() >= fLimit;
}
}

View file

@ -54,6 +54,7 @@ import org.eclipse.cdt.internal.core.index.IWritableIndex;
import org.eclipse.cdt.internal.core.index.IndexBasedFileContentProvider;
import org.eclipse.cdt.internal.core.parser.IMacroDictionary;
import org.eclipse.cdt.internal.core.parser.scanner.InternalFileContentProvider;
import org.eclipse.cdt.internal.core.parser.util.LRUCache;
import org.eclipse.cdt.utils.EFSExtensionManager;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
@ -270,15 +271,15 @@ public abstract class AbstractIndexerTask extends PDOMWriter {
return Integer.MAX_VALUE;
}
}
protected enum MessageKind { parsingFileTask, errorWhileParsing, tooManyIndexProblems }
private int fUpdateFlags= IIndexManager.UPDATE_ALL;
private UnusedHeaderStrategy fIndexHeadersWithoutContext= UnusedHeaderStrategy.useDefaultLanguage;
private boolean fIndexFilesWithoutConfiguration= true;
private List<LinkageTask> fRequestsPerLinkage= new ArrayList<LinkageTask>();
private Map<IIndexFile, IndexFileContent> fIndexContentCache= new HashMap<IIndexFile, IndexFileContent>();
private Map<IIndexFileLocation, IIndexFile[]> fIndexFilesCache= new HashMap<IIndexFileLocation, IIndexFile[]>();
private Map<IIndexFile, IndexFileContent> fIndexContentCache= new LRUCache<IIndexFile, IndexFileContent>(500);
private Map<IIndexFileLocation, IIndexFile[]> fIndexFilesCache= new LRUCache<IIndexFileLocation, IIndexFile[]>(5000);
private Object[] fFilesToUpdate;
private List<Object> fFilesToRemove = new ArrayList<Object>();