`
yiihsia
  • 浏览: 67913 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

lua、groovy嵌入到java中的性能对比

    博客分类:
  • Java
阅读更多

去年的文章,备份

lua和groovy都是可以嵌入到java中的脚本语言。lua以高性能著称,与C/C++在游戏开放中有较多使用,groovy是一个基于Java虚拟机(JVM)的敏捷动态语言,在jvm下有着不错的性能。


groovy天生与java有着极高的兼容性,两者间对象无缝存取,支持jsr223。而lua是基于C的,需要调用jni,jni的性能是硬伤。这块网上基本都用luajava,好多年不更新了,不支持jsr223,而且很多方法都没有实现,也不能做到对象无缝存取,比如lua传到java的对象,java用不了。 另一个是luaj,基于java的lua库,快速,稳定,支持jsr223,测试对比用的是这个。 再提一个jnlua,文档里写的很牛逼,支持jsr223,支持双向对象调用,结果根本跑不了,shit。

测试程序都是基于jsr223编写,先经过脚本编译。再运行一遍脚本。 然后统计调用脚本100次消耗的时间,求平均。可以去除编译脚本、初次运行等因素带来的干扰。测试机器为win32机器。

对比结果如下:

  LuaLuaj 2.0.2 Groovy2.0.1 Jython2.5.3 Javajdk6
100000次for 4ms 2ms 42ms 1ms
100000次整数比较 7ms 9ms   1ms
外部传入大小100000的List<Integer>,迭代相加 82ms 7ms   3ms
创建100000大小的table。并赋值 34ms 38ms   64ms
复杂四则计算100000次 480ms 280ms   130ms
100000记录的group 578ms 286ms   180ms

可以看出在jvm环境中,groovy的性能基本是lua的2倍,特别是lua调用java传入的对象时,性能更低。 两种脚本语言创建table的性能都比java高。 不要再迷信那些官方的性能测试,不考虑应用的上下文,那些性能测试报告只能做个参考。

附100000次整数比较的测试代码:

import javax.script.Bindings;

import javax.script.Compilable;

import javax.script.CompiledScript;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

import javax.script.ScriptException;

 

public class IntEquals {

public static void main(String[] args) throws ScriptException {

ScriptEngineManager sem = new ScriptEngineManager();

 

ScriptEngine e = sem.getEngineByExtension(“.lua”);

CompiledScript cs = ((Compilable) e)

.compile(“for i=1,100000 do if i == 100 then end end  return 10″);

 

 

Bindings luab = e.createBindings();

cs.eval(luab);

 

long start = System.nanoTime();

for (int i = 0; i < 100; i++) {

cs.eval(luab);

}

System.out.println(“lua script for 100000 time:”

+ (System.nanoTime() – start) / 100000000 + “ms”);

// groovy

e = sem.getEngineByExtension(“groovy”);

cs = ((Compilable) e)

.compile(“for ( i in 1..100000 ) { if(i==100){};}; return 10″);

cs.eval(luab);

start = System.nanoTime();

for (int i = 0; i < 100; i++) {

cs.eval(luab);

}

 

System.out.println(“groovy script for 100000 time:”

+ (System.nanoTime() – start) / 100000000 + “ms”);

}

}

 

win下结果 lua:7ms groovy:9ms
mac os下结果 lua:7ms groovy:1ms

分享到:
评论

相关推荐

    Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)

    在Java中,你可以使用LuaState类来创建和管理Lua虚拟机,通过`loadfile`方法加载Lua脚本,`call`方法执行脚本,最后记得关闭虚拟机以释放资源。 LuaJava允许Java对象和Lua脚本之间进行数据交换。例如,你可以将Java...

    java、groovy、C#、Javascript性能比较

    java、groovy、C#、Javascript的运行效率到底如何? 通过实验比较,Javascript的运行效率解决java,看来基于javascript的html5前途远大。 C#的Release版的运行性能也相当高,和C++相差不大,值得推荐。 文件内部...

    luajava-x32-x64.zip

    "说明.txt"文件很可能是对如何集成和使用这些库的详细指南,包括如何加载luajava库,如何在Lua中调用Java类,以及如何在Java中执行Lua脚本等步骤。通常,它会提供示例代码帮助开发者快速上手。 总结来说,luajava-...

    luajava实例及jar包,dll动态链接库

    在LuaJava中,这个dll文件用于实现Lua与Java之间的底层交互,处理如内存管理、数据类型转换等任务。 描述中的"luajava-1.1-win32-lua51.zip"暗示了这是针对Windows 32位系统的,并且基于Lua 5.1版本。这意味着Lua...

    Lua-1.0.113 luajava

    Lua是一种轻量级的脚本语言,主要用于嵌入到其他应用程序中以提供程序配置、扩展或脚本支持。它的设计目标是简洁、易读、易实现,并且具有强大的功能。Lua-1.0.113是Lua的一个早期版本,尽管版本号较低,但在当时...

    cpp-Lua533和LuaJava移植至Android的示例

    通过研究和理解这个示例项目,你可以了解到如何在Android应用中嵌入Lua,以及如何利用LuaJava实现Java与Lua的互操作。这样的技术可以用于游戏开发、自动化测试、动态配置等方面,极大地提升应用的可扩展性和可维护性...

    luajava-1.1-x64-lua51

    "luajava-1.1-x64-lua51"是一个针对64位系统的版本,它提供了将Lua脚本集成到Java应用中的解决方案。本文将深入探讨这个工具包的原理、用途以及如何使用。 首先,我们要理解Lua和Java的基础。Lua是一种轻量级的脚本...

    LuaJava5.1

    3. **调用Lua函数**:通过Lua状态机,可以将Java方法暴露给Lua,也可以在Java中调用Lua定义的函数。 4. **数据交互**:Lua和Java之间的数据交换是双向的,可以将Java对象转换为Lua值,反之亦然。 5. **错误处理**:...

    luajava1.1 64位版本和32位版本

    luajava是一款将Lua脚本语言与Java平台紧密集成的工具,它允许在Java应用程序中无缝地执行Lua代码,同时也支持从Lua调用Java对象和方法,极大地拓展了Java应用的可扩展性和灵活性。本文将详细探讨luajava的64位版本...

    luajava从5.1升级到5.3

    LuaJava是一种将Lua脚本语言与Java平台相结合的技术,允许开发者在Java应用中嵌入和执行Lua代码,以此实现灵活的动态扩展和配置。随着Lua版本的不断更新,从5.1升级到5.3不仅带来了性能的提升,还引入了诸多新特性。...

    Java下执行Lua脚本工具LuaJava.zip

    LuaJava 是一款专门用于在java下执行lua脚本,该工具的主要目的是允许编写Lua脚本去操作Java组件,不需要任何声明以及任何的预处理。LuaJava 也允许Java去实现一个接口来调用Lua,这样任何的Lua相关接口功能都可以被...

    Lua代码性能分析 Lua代码性能分析

    Lua代码性能分析 Lua代码性能分析

    use_Lua.rar_c++ lua_lua_lua C++ 嵌入_lua vc

    在C++编程中,有时我们需要在程序中引入脚本语言以实现动态行为或者提供更灵活的编程模型。...通过深入理解上述步骤和Lua的C API,开发者可以创建出强大的混合型应用,同时享受到C++的高性能和Lua的便捷脚本能力。

    android嵌入lua

    总的来说,这篇关于“android嵌入lua”的博文可能会涵盖如何在Android项目中集成Lua,使用Lua与Java交互的原理和实践,以及可能涉及的辅助开发工具。通过学习这些内容,开发者可以将Lua的优势充分利用在Android应用...

    lua学习资料 实现java与c c++程序集成

    在Java中,可以使用JNLua库来创建和执行Lua脚本。在C/C++项目中,Lua库可以直接被链接,通过luaL_newstate和luaL_openlibs等函数初始化解释器,并使用lua_dofile或lua_pcall执行脚本。这种方式允许在已有的应用中...

    lua插件包,帮助你搭建lua-java项目

    在Java项目中,你可以通过编写Java代码来创建Lua环境,加载Lua脚本,然后在Java中调用Lua函数,反之亦然。这样可以将复杂逻辑交给Lua处理,而保持Java的稳定性和安全性。 总之,lua插件包提供了一种简单的方法将...

    VC知识库文章 - 将Lua嵌入到自己的程序中.htm

    VC知识库文章 - 将Lua嵌入到自己的程序中.htm

    luajava最新源码+jar包+动态链接库+lua编程环境

    史上最全luajava最新源码+jar包+动态链接库+lua编程环境 史上最全luajava最新源码+jar包+动态链接库+lua编程环境 史上最全luajava最新源码+jar包+动态链接库+lua编程环境

    Javaweb中调用lua的插件

    4. 交互:在Lua脚本中调用Java方法,或者在Java中调用返回的Lua函数,实现双向通信。 需要注意的是,由于Lua和Java的数据类型不同,两者之间的数据转换需要特别处理。例如,Lua的表可能对应Java的Map,而Lua的字符...

Global site tag (gtag.js) - Google Analytics