大家好,欢迎来到IT知识分享网。
luajit(www.luajit.org)是lua的一个Just-In-Time也就是运行时编译器,也可以说是lua的一个高效版。
原生lua、luajit的jit模式(pc和安卓可用),luajit的interpreter模式(ios下只能运行这个)。
1.jit与interpreter 模式的区别
【jit】
luajit并不是直接将lua转为机器码,而是先以luajit的bytecode在runtime中iterpreter模式运行,iterpreter运行中发现某段代码经常被执行就会开启记录模式,记录这段代码的细节,推测变量的类型,记下来->SSAIR->机器码。
以trace compiler方案推测着运行机器码,用固定的内存访问而不是查表操作,所以速度更快。
luajit为了极限级的性能,就会大胆进行假设,如果发现a+b就是两个数值相加,就编译出数值求和的机器码。
但是如果某一时刻a+b不是数值相加,而是变成了两个表相加呢?这机器码岂不是就导致错误了?因此每次luajit做了假设时,都会加上一段守护代码(guard),检查假设是不是对的,如果不对,就会跳转出去,再根据情况,来决定要不要再编译一段新的机器码,来适配新的情况。
一旦jit失败会比原先的interpreter更耗!
【interpreter】
interpreter模式下(ios的情况),luajit就变成了老老实实动态检查动态跳转的执行模式,对分支预测反而并不敏感,并不需要过分注重这方面的优化。
因此interpreter模式是必须的。
interpreter模式夸平台稳定性足够,性能行为也基本接近原生lua(不会像jit模式有各种trace compiler带来的坑),但是性能依然比原生lua有绝对优势(平均可以快3~8倍,虽然不及jit模式极限几十倍的提升)
2. 如何打开Jitlua 的interpreter模式?非常简单,最你执行第一行lua前面加上:
if jit then
jit.off() –关闭 jit 模式
jit.flush() –打开 interpreter 模式
end
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/29795.html