修复ReflectUtil中因class和Method关联导致的缓存无法回收问题(issue#4039@Github)

This commit is contained in:
Looly
2025-08-29 11:52:06 +08:00
parent c1c92def35
commit bd123386ce
38 changed files with 1015 additions and 91 deletions

View File

@@ -1,16 +1,9 @@
package cn.hutool.script;
import cn.hutool.core.map.WeakConcurrentMap;
import cn.hutool.core.map.reference.WeakKeyValueConcurrentMap;
import cn.hutool.core.util.StrUtil;
import javax.script.Bindings;
import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.Invocable;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.*;
/**
* 脚本工具类
@@ -20,7 +13,7 @@ import javax.script.ScriptException;
public class ScriptUtil {
private static final ScriptEngineManager MANAGER = new ScriptEngineManager();
private static final WeakConcurrentMap<String, ScriptEngine> CACHE = new WeakConcurrentMap<>();
private static final WeakKeyValueConcurrentMap<String, ScriptEngine> CACHE = new WeakKeyValueConcurrentMap<>();
/**
* 获得单例的{@link ScriptEngine} 实例
@@ -29,7 +22,7 @@ public class ScriptUtil {
* @return {@link ScriptEngine} 实例
*/
public static ScriptEngine getScript(String nameOrExtOrMime) {
return CACHE.computeIfAbsent(nameOrExtOrMime, () -> createScript(nameOrExtOrMime));
return CACHE.computeIfAbsent(nameOrExtOrMime, (key) -> createScript(nameOrExtOrMime));
}
/**