GWT:如何避免在生成的JavaScript代码中调用dynamicCast和canCastUnsafe? [英] GWT: How to avoiding calls to dynamicCast and canCastUnsafe in generated JavaScript code?

查看:84
本文介绍了GWT:如何避免在生成的JavaScript代码中调用dynamicCast和canCastUnsafe?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用Java编写一些特殊用途的数据结构,用于浏览器(使用GWT编译成JavaScript)。

我试图匹配某些内置JDK类的性能我注意到事情运行速度相当快,但是当我将代码跟踪与某些模拟的JDK代码进行比较时,我的模拟JDK模拟了很多对dynamicCast和canCastUnsafe的调用类没有。它只是考虑到了性能上的差异......



任何GWT专家都知道如何避免这种情况?这是相当于20%的开销: - ($ / b
$ b

详细信息:

以下是配置文件输出(在Firebug中捕获)为10000个插入的随机整数,在0到100,000之间分成两个不同的数据结构:

Google的java.util.TreeMap的TreeMap实现(红黑树):
$ b $ pre $ 配置文件(4058.602ms,687545调用)
函数调用百分比自己的时间
$ insert_1 129809 41.87% 1699.367ms
$ compare_0 120290 16%649.209ms
$ isRed 231166 13.33%540.838ms
compareTo_0 120290 8.96%363.531ms
$ put_2 10000 6.02%244.493ms
wrapArray 10000 3.46%140.478ms
createFromSeed 10000 2.91%118.038ms
$ TreeMap $ Node 10000 2.38%96.706ms
initDim 10000 1.92%77.735ms
initValues 10000 1.49%60.319ms
$ rotateSingle 5990 0.73%29.55ms
TreeMap $ Node 10000 0.47%18.92ms

我的代码(AVL树):

 配置文件(5397.686ms,898603调用)
函数调用百分比自己的时间
$ insert 120899 25.06%1352.827ms
$ compare 120899 17.94%968.17ms
dynamicCast 120899 14.12%762.307ms <--------
$ balanceTree 120418 13.64%736.096ms
$ setHeight 126764 8.93%482.018ms
compareTo_0 120899 7.76%418.716ms
canCastUnsafe 120899 6.99%377.518ms< --------
$ put 10000 2.59%139.936ms
$ AVLTreeMap $ Node 9519 1.04%56.403ms
$ moveLeft 2367 0.36%19.602ms
AVLTreeMap $ State 9999 0.36%19.429ms
$ moveRight 2378 0.34%18.295ms
AVLTreeMap $ Node 9519 0.34%18.252ms
$ swingRight 1605 0.26%14.261ms
$ swingLeft 1539 0.26%13.856ms

其他观察:

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆