代码拉取完成,页面将自动刷新
在脚本运行时,每次都会对脚本进行编译成class进行加载,虽然现在有CompileCache,但是这个缓存并没有将编译的class进行缓存进去,导致堆外内存持续增长(前几天发现线上magic-api程序堆内存700M,但是堆外内存占用了3G多)
Class clazz = new MagicScriptClassLoader(Thread.currentThread().getContextClassLoader()).load(compiler.getClassName(), compiler.bytecode());
这里我目前是将Class clazz放在MagicScript当做全局变量本地缓存起来,CompileCache拿到MagicScript实例的时候优先用缓存好的class。目前观测还较为正常
我们在使用中也遇到这个问题,metadata 区 会增长,只能靠FGC 去回收meta 区,这样导致FGC次数变得频繁,影响了性能,我跟代码,发现compile也可以缓存,那部分也是不变的,你可以试一下一下把
public Object execute(MagicScriptContext context) {
MagicScriptRuntime runtime = null;
try {
MagicScriptEngine.getDefaultImports().forEach((name, value) -> {
if (value instanceof DynamicModuleImport) {
context.set(name, ((DynamicModuleImport) value).getDynamicModule(context));
} else {
context.set(name, value);
}
});
//这里可以用script key做缓存
runtime = compile();
return runtime.execute(context);
} catch (MagicExitException e) {
return e.getExitValue();
} catch (MagicScriptCompileException e) {
throw e;
} catch (Throwable t) {
MagicScriptError.transfer(runtime, t);
}
return null;
}
您好,请问一下,你说的这里的script key是指context.getScriptName()么?
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
这个问题解决了吗?如果这样,那岂不magic-api也一样不能正式使用?
目前我是在这块将编译信息进行缓存,基本解决该问题
登录 后才可以发表评论