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

简介: lua和groovy都是可以嵌入到java中的脚本语言。lua以高性能著称,与C/C++在游戏开放中有较多使用,groovy是一个基于Java虚拟机(JVM)的敏捷动态语言,在jvm下有着不错的性能。 groovy天生与java有着极高的兼容性,两者间对象无缝存取,支持jsr223。

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

http://www.tuicool.com/articles/QbMRFr

http://www.yiihsia.com/2012/09/lua、groovy嵌入到java中的性能对比/

 

相关文章
|
2月前
|
缓存 算法 Java
Java 实现的局域网管控软件的性能调优
局域网管控软件在企业网络管理中至关重要,但随着网络规模扩大和功能需求增加,其性能可能受影响。文章分析了数据处理效率低下、网络通信延迟和资源占用过高等性能瓶颈,并提出了使用缓存、优化算法、NIO库及合理管理线程池等调优措施,最终通过性能测试验证了优化效果,显著提升了软件性能。
43 1
|
1月前
|
XML Java 数据库连接
性能提升秘籍:如何高效使用Java连接池管理数据库连接
在Java应用中,数据库连接管理至关重要。随着访问量增加,频繁创建和关闭连接会影响性能。为此,Java连接池技术应运而生,如HikariCP。本文通过代码示例介绍如何引入HikariCP依赖、配置连接池参数及使用连接池高效管理数据库连接,提升系统性能。
64 5
|
4月前
|
Kubernetes Cloud Native Java
云原生之旅:从容器到微服务的演进之路Java 内存管理:垃圾收集器与性能调优
【8月更文挑战第30天】在数字化时代的浪潮中,企业如何乘风破浪?云原生技术提供了一个强有力的桨。本文将带你从容器技术的基石出发,探索微服务架构的奥秘,最终实现在云端自由翱翔的梦想。我们将一起见证代码如何转化为业务的翅膀,让你的应用在云海中高飞。
|
4月前
|
存储 监控 Java
Java多线程优化:提高线程池性能的技巧与实践
Java多线程优化:提高线程池性能的技巧与实践
138 1
|
2月前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
75 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
|
1月前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
在Java应用开发中,数据库操作常成为性能瓶颈。频繁的数据库连接建立和断开增加了系统开销,导致性能下降。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接,显著减少连接开销,提升系统性能。文章详细介绍了连接池的优势、选择标准、使用方法及优化策略,帮助开发者实现数据库性能的飞跃。
33 4
|
1月前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
41 1
|
2月前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
43 2
|
3月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
497 37
|
2月前
|
缓存 Java 数据库连接
使用 NCache 将 Java 微服务扩展到极致性能
使用 NCache 将 Java 微服务扩展到极致性能
38 8