Nashorn ScriptEngine使用了多少内存?

 爱智孝的蛋清汤 发布于 2023-01-10 12:39

我们目前正在为我们的某个产品添加服务器端脚本功能.作为其中的一部分,我正在评估JSR 223脚本引擎.由于我们可能在服务器上运行大量脚本,因此我特别关注这些脚本引擎的内存使用情况.将Rhino(Apple JDK 1.6.0_65-b14-462-11M4609,Mac OS X 10.9.2)与Nashorn(Oracle JDK 1.8.0-b132)进行比较,每个ScriptEngine实例的内存使用量似乎有很大差异.

为了测试这个,我使用一个简单的程序来激活10个空白的ScriptEngine实例,然后阻止从stdin读取.然后我使用jmap进行堆转储(jmap -dump:format = b,file = heap.bin),然后在转储中搜索相关的脚本引擎实例:

import javax.script.*;
public class test {
    public static void main(String...args) throws Exception {
        ScriptContext context = new SimpleScriptContext();
        context.setWriter(null);
        context.setErrorWriter(null);
        context.setReader(null);
        ScriptEngine js[] = new ScriptEngine[10];
        for (int i = 0; i < 10; ++i) {
            js[i] = new ScriptEngineManager().getEngineByName("javascript");
            js[i].setContext(context);
            System.out.println(js[i].getClass().toString());
        }
        System.in.read();
    }
}

在上下文中清空各种读取器/写入器字段的原因是因为我们不使用它们,并且Rhino的早期堆转储表明它们构成了每个实例开销的一小部分(并且似乎没有共享) .

在Eclipse MAT中分析这些堆转储然后我得到以下每个实例保留的堆大小:

Rhino:13,472字节/实例(如果我没有读取器/写入器字段,则最多为73,832字节/实例)

Nashorn:324,408字节/实例

Nashorn的尺寸是否会增加24倍?执行速度不是我们将要执行的脚本(主要是I/O绑定)的主要问题,因此我正在考虑将我们自己的Rhino副本用于Java 8+.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有