Java与Lua相互调用

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
for (int j = 0; j < iterNum; j++) {

int a = 0;

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

a = a + i;

}

}

end = System.currentTimeMillis();

}

lua脚本

function test()

a = 0;

for i = 0, 10000, 1 do

a = a + i;

end

end

1. ScriptEngine调用方式

====================

调用方式:外部10000次调用,lua内部10000次循环a++

总时间:8.9s左右

平均一次lua方法调用(1w次a++):0.89ms

lua内部一次循环调用(1次a++):0.000089ms

修改lua内部循环1次

时间:10ms

平均一次lua方法调用:0.001ms

// ==================================================================================

// ScriptEngine方式

// ==================================================================================

Reader reader = new FileReader(luaStr);

LuaScriptEngine luaScriptEngine = (LuaScriptEngine) new LuaScriptEngineFactory().getScriptEngine();

// 使用luajc编译器,比默认luac编译器快3倍

LuajContext context = (LuajContext) luaScriptEngine.getContext();

LuaJC.install(context.globals);

CompiledScript compiledScript = luaScriptEngine.compile(reader);

Bindings bindings = new SimpleBindings();

compiledScript.eval(bindings);

LuaFunction luafunc = (LuaFunction) bindings.get(“test”);

beg = System.currentTimeMillis();

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

luafunc.call();

}

end = System.currentTimeMillis();

// ==================================================================================

2. Globals调用方式

===============

调用方式:外部10000次调用,lua内部10000次循环a++

时间:2.3s左右

平均一次lua方法调用:0.23ms

lua内部一次循环调用:0.000023ms

修改lua内部循环1次

时间:4ms

平均一次lua方法调用:0.0004ms

// ==================================================================================

// Global方式

// ==================================================================================

Globals globals = JsePlatform.standardGlobals();

// 使用luajc编译器,比默认luac编译器快3倍

LuaJC.install(globals);

LuaValue doFile = globals.get(“dofile”);

doFile.call(LuaValue.valueOf(luaStr));

LuaValue luaValue = globals.get(“test”);

beg = System.currentTimeMillis();

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

luaValue.call();

}

end = System.currentTimeMillis();

1w*1w调用总时间

平均一次lua脚本时间

lua内部一次循环时间

Java

1ms-2ms

-

-

ScriptEngine

8.9s

0.89ms

0.000089ms

Globals

2.3s

0.23ms

0.000023ms

3. lua调用java

=============

把lua内的循环10000次,挪到java方法执行,java for(10000) -> lua -> java for(10000)

function test()

luaTestJava:javaLoop()

end

Java提供loop方法

public static void javaLoop() {

int a = 0;

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

《MySql面试专题》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

《MySql性能优化的21个最佳实践》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

《MySQL高级知识笔记》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

关注我,点赞本文给更多有需要的人
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
7HUTM0J-1714440221711)]

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

[外链图片转存中…(img-KCFX5l9V-1714440221711)]

关注我,点赞本文给更多有需要的人
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值