仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1043|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA教程之Java利用“指针”疾速对照字节仓酷云

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:29:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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:08 | 只看该作者
是一种使用者不需花费很多时间学习的语言
蒙在股里 该用户已被删除
板凳
发表于 2015-1-21 14:50:09 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
小妖女 该用户已被删除
地板
发表于 2015-1-25 10:36:44 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
飘飘悠悠 该用户已被删除
5#
发表于 2015-1-28 06:02:21 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
6#
发表于 2015-2-2 16:29:11 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
精灵巫婆 该用户已被删除
7#
发表于 2015-2-8 00:57:51 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
只想知道 该用户已被删除
8#
发表于 2015-2-23 20:18:24 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
飘灵儿 该用户已被删除
9#
发表于 2015-3-2 19:38:23 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
透明 该用户已被删除
10#
发表于 2015-3-11 05:44:28 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
灵魂腐蚀 该用户已被删除
11#
发表于 2015-3-11 09:53:39 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
山那边是海 该用户已被删除
12#
发表于 2015-3-18 03:27:25 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
深爱那片海 该用户已被删除
13#
发表于 2015-3-22 20:07:17 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
若相依 该用户已被删除
14#
发表于 2015-3-24 12:17:30 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
不帅 该用户已被删除
15#
发表于 2015-3-27 10:06:21 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
谁可相欹 该用户已被删除
16#
发表于 2015-3-27 11:10:05 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
柔情似水 该用户已被删除
17#
发表于 2015-4-5 01:16:39 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
简单生活 该用户已被删除
18#
发表于 2015-4-6 08:49:07 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
第二个灵魂 该用户已被删除
19#
 楼主| 发表于 2015-4-9 15:39:00 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
小女巫 该用户已被删除
20#
发表于 2015-4-21 17:17:35 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 21:08

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表