J2V8学习一 --- 介绍

J2V8是Google流行的JavaScript引擎V8的一组JavaScript绑定。它旨在为Android带来高效的JavaScript,是Tabris.js背后的主力。J2V8还可以在Windows、Linux和MacOS上运行

J2V8在设计时充分考虑了性能和内存消耗。如果JavaScript执行结果为32位整数,则可以直接将其顾问作为原语进行访问,而无需先创建包装器类的实例。64位双精度和布尔值也是如此。

J2V8还使用延迟加载技术。也就是说,只有当访问JavaScript结果时,它才会将其复制到JNI Bridge上。

J2V8只是一组V8的Java绑定,它以Java形式公开V8API。V8是使用C++编写的,要访问V8,J2V8使用JNI.由于本机交互,必须管理C++内存。J2V8可帮助实现这一点,但要求开发人员在不需要对象时通过调用release()明确释放任何本机句柄。释放对象不会将其从JavaScript中释放(V8垃圾收集器会执行此操作);release只是删除本机句柄。释放资源的规则很简单:

1、如果是自己创建的,则必须释放,但有一个例外:如果对象通过返回语句传回,系统将会自动释放
2、如果是系统创建的,则无需担心,但有一个例外:如果该对象作为方法调用的结果返回给自己,则需要释放。

线程模型

JavaScript本身是单线程的,J2V8也强制执行了这一点。对单个运行时的所有访问都必须来自同一个线程。这确保在操作或使用单个JavaScript运行时不会出现竞争条件
虽然J2V8确保对单个运行时的所有访问都必须来自同一线程,但可以创建多个运行时,每个运行时都在自己的线程上。

实例:

访问JavaScript对象

val runtime = V8.createV8Runtime()
runtime.executeVoidScript(
""
    + "var person = {};\n"
    + "var hockeyTeam = {name : 'WolfPack'};\n"
    + "person.first = 'Ian';\n"
    + "person['last'] = 'Bull';\n"
    + "person.hockeyTeam = hockeyTeam;\n"
)
runtime.release()
val person = runtime.getObject("person")
val hockeyTeam = person.getObject("hockeyTeam")
person.release()
hockeyTeam.release()

调用JavaScript函数
 

var hockeyTeam = {
     name      : 'WolfPack',
     players   : [],
     addPlayer : function(player) {
                   this.players.push(player);
                   return this.players.size();
     }
}
V8Array parameters = new V8Array(runtime).push(player1);
int size = hockeyTeam.executeIntegerFunction("addPlayer", parameters);
parameters.release();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值