I would consider a different caching strategy to avoid possible OOM, something along the lines of..

```java
private final Map<String, SoftReference<?>> expressionCache = new LinkedHashMap<String, SoftReference<?>>() {
		@Override
		protected boolean removeEldestEntry(Map.Entry<String, SoftReference<?>> entry) {
			return size() > CACHE_CAPACITY;
	      }
	};
```

@skottler