仓酷云
标题:
JAVA教程之Java利用“指针”疾速对照字节仓酷云
[打印本页]
作者:
第二个灵魂
时间:
2015-1-18 11:29
标题:
JAVA教程之Java利用“指针”疾速对照字节仓酷云
j2EE和asp比较,其实也没什么比的,原因和我上面说那些比较差不了多少,也是稳定性,安全性,J2EE比asp高,速度上比不过asp,asp也是延续着它的拖拽控件的方法,提高速度。怎样才干疾速对照两个字节数组呢?我将成绩形貌成上面的接口:
publicintcompareTo(byte[]b1,ints1,intl1,byte[]b2,ints2,intl2);
最直不雅的做法是同时遍历两个数组,两两对照。
publicintcompareTo(byte[]buffer1,intoffset1,intlength1,
byte[]buffer2,intoffset2,intlength2){
//Shortcircuitequalcase
if(buffer1==buffer2&&offset1==offset2
&&length1==length2){
return0;
}
//BringWritableComparatorcodelocal
intend1=offset1+length1;
intend2=offset2+length2;
for(inti=offset1,j=offset2;i<end1&&j<end2;i++,j++){
inta=(buffer1
&0xff);
intb=(buffer2[j]&0xff);
if(a!=b){
returna-b;
}
}
returnlength1-length2;
}
假如事变这么复杂就停止了,就没成心思了。
假如要提拔功能,能够做轮回睁开等等优化,但这些优化应当依附JVM来做,新的JVM能够做的很好。那另有甚么举措能够进步功能呢?
能够将
字节数组兼并
!!下面的例子中,每一个byte自愿转型成了int,再对照。实在我们能够将8个byte转换成一个long,在对照long,如许效果会不会好些?用甚么办法转换才是最优的?
longsun.misc.Unsafe.getLong(Objecto,intoffset)
Java供应了一个当地办法,能够最快最恶化换byte与long。该函数是间接会见一个对象的内存,内存地点是对象指针加偏移量,前往该地点指向的值。有人说Java很平安,不成以操纵指针,以是有的时分功能也不高。实在不合错误,有了这个Unsafe类,Java一样也不平安。以是Unsafe类中的办法都不是public的,不外不妨,我们有反射。言回正传,上面是利用这类手艺手腕的完成代码。
publicintcompareTo(byte[]buffer1,intoffset1,intlength1,
byte[]buffer2,intoffset2,intlength2){
//Shortcircuitequalcase
if(buffer1==buffer2&&offset1==offset2
&&length1==length2){
return0;
}
intminLength=Math.min(length1,length2);
intminWords=minLength/Longs.BYTES;
intoffset1Adj=offset1+BYTE_ARRAY_BASE_OFFSET;
intoffset2Adj=offset2+BYTE_ARRAY_BASE_OFFSET;
/*
*Compare8bytesatatime.Benchmarkingshowscomparing8
*bytesatatimeisnoslowerthancomparing4bytesatatime
*evenon32-bit.Ontheotherhand,itissubstantiallyfaster
*on64-bit.
*/
for(inti=0;i<minWords*Longs.BYTES;i+=Longs.BYTES){
longlw=theUnsafe.getLong(buffer1,offset1Adj+(long)i);
longrw=theUnsafe.getLong(buffer2,offset2Adj+(long)i);
longdiff=lw^rw;
if(diff!=0){
if(!littleEndian){
return(lw+Long.MIN_VALUE)<(rw+Long.MIN_VALUE)?-1
:1;
}
//Usebinarysearch,一下省略多少代码
.....
return(int)(((lw>>>n)&0xFFL)-((rw>>>n)&0xFFL));
}
}
//Theepiloguetocoverthelast(minLength%elements.
for(inti=minWords*Longs.BYTES;i<minLength;i++){
intresult=UnsignedBytes.compare(buffer1[offset1+i],
buffer2[offset2+i]);
if(result!=0){
returnresult;
}
}
returnlength1-length2;
}
完成比本来庞大了一些。但此次一次能够对照8个字节了。这类getLong函数和体系的字节序是牢牢相干的,假如是小端序操纵起来有点贫苦,代码先省略失落。如许操纵实践效果怎样?我们必要对照测试下。对照两个1M的字节数组,假如利用第一个版本,每次对照均匀必要2.5499ms,假如利用第二个版本,必要0.8359ms,提拔了3倍。对应这类CPU麋集型的操纵,如许的提拔但是很可不雅的。
假如要提拔功能,利用Unsafe间接会见内存也是不错的选择。
由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,
作者:
再见西城
时间:
2015-1-21 07:50
是一种使用者不需花费很多时间学习的语言
作者:
蒙在股里
时间:
2015-1-21 14:50
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
作者:
小妖女
时间:
2015-1-25 10:36
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者:
飘飘悠悠
时间:
2015-1-28 06:02
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
作者:
仓酷云
时间:
2015-2-2 16:29
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
作者:
精灵巫婆
时间:
2015-2-8 00:57
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者:
只想知道
时间:
2015-2-23 20:18
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
作者:
飘灵儿
时间:
2015-3-2 19:38
Java是一种计算机编程语言,拥有跨平台、面向对java
作者:
透明
时间:
2015-3-11 05:44
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者:
灵魂腐蚀
时间:
2015-3-11 09:53
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
作者:
山那边是海
时间:
2015-3-18 03:27
是一种将安全性(Security)列为第一优先考虑的语言
作者:
深爱那片海
时间:
2015-3-22 20:07
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者:
若相依
时间:
2015-3-24 12:17
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者:
不帅
时间:
2015-3-27 10:06
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者:
谁可相欹
时间:
2015-3-27 11:10
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
作者:
柔情似水
时间:
2015-4-5 01:16
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者:
简单生活
时间:
2015-4-6 08:49
Java 编程语言的风格十分接近C、C++语言。
作者:
第二个灵魂
时间:
2015-4-9 15:39
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者:
小女巫
时间:
2015-4-21 17:17
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2