Java 执行动态脚本

作者: 飞虎兄 | 来源:发表于2018-10-16 16:30 被阅读3次

JSR 223中规范了在Java虚拟机上运行的脚本语言与Java程序之间的交互方式。JSR 233是JavaSE6的一部分,在Java表中API中的包是javax.script。目前Java虚拟机支持比较多的脚本语言,比较流行的有JavaScript、Scala、JRuby、Jython和Groovy等。

执行js脚本

测试代码

        int size = 10000;
        ScriptEngineManager sem = new ScriptEngineManager();
        ScriptEngine scriptEngine = sem.getEngineByName("js");
        long start = System.currentTimeMillis();
        for (int i = 0; i < size; i++) {
            String jsStr = String.format("%d > %d", i, i+1);
            try{
                scriptEngine.eval(jsStr);
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
        long end = System.currentTimeMillis();
        System.out.printf("js:%d ms\n" ,end - start);

执行lua脚本

需要第三方库Luaj的支持

Luaj是基于lua 5.2.x版本的lua解释器,其中考虑了以下目标:

  • 以Java为中心的lua vm实现,旨在利用标准Java功能。
  • 轻量级,高性能的lua执行。
  • 可以在JME,JSE或JEE环境中运行的多平台。
  • 用于集成到实际项目中的完整库和工具集。
  • 由于对vm和库功能进行了充分的单元测试,因此可靠。

测试代码

        int size = 100000;

        Globals globals = JsePlatform.standardGlobals();
        long start = System.currentTimeMillis();
        for (int i = 0; i < size; i++) {
            String luaStr = String.format("return %d > %d", i, i+1);
            LuaValue chunk = globals.load(luaStr);
            chunk.call().toboolean();
        }
        long end = System.currentTimeMillis();
        System.out.printf("lua:%d ms\n", end - start);

平均执行时长

lua:900 ms
javascript:60000 ms
lua脚本的执行效率大大高于js脚本的执行效率。

相关文章

  • day_1_13 jsp&el&jstl

    JSP Java Server Page = html + java脚本 + jsp动态标签Jsp的执行流程:JS...

  • Java 执行动态脚本

    JSR 223中规范了在Java虚拟机上运行的脚本语言与Java程序之间的交互方式。JSR 233是JavaSE6...

  • 动态语言

    Java SE 6 新特性-对脚本语言的支持 动态调用动态语言,第 1 部分-引入 Java 脚本 API 动态调...

  • 反射&动态代理

    反射 Java 的动态性体现在:反射机制、动态执行脚本语言、动态操作字节码 反射:在运行时加载、探知、使用编译时未...

  • jsp入门笔记

    JSP动态页面技术 脚本和注释jsp脚本 <% java代码 %> <%= java变量或表达式 %> <%...

  • 暑假学习打卡4

    JSP:在原有html的基础+java脚本+jsp标签,动态资源 jsp九个内置对象 java脚本:<%........

  • Gradle 相关

    一、Groovy脚本 Groovy是一种动态语言,Groovy脚本基于Java且拓展了Java,都在Java虚拟机...

  • Kettle11:Kettle脚本控件

    本章讲解以下三种脚本的案例01 javascript脚本02 java脚本03 执行SQL脚本 脚本 1.脚本是转...

  • 动态执行和静态执行

    动态执行: 在运行期间根据动态信息来确定执行次序。 静态执行: Java虚拟机根据编译期间确定的执行次序顺序执行。

  • Redis分布式锁 基于redis.eval

    实现方法:使用redis的eval执行lua脚本 Java代码

网友评论

    本文标题:Java 执行动态脚本

    本文链接:https://www.haomeiwen.com/subject/mmuhzftx.html