JAVA教程之在JVM中到场CRC32 Intrinsic减速CRC校验仓酷云
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解成绩:在Java使用中比方在Hadoop中,常常用到CRC校验盘算。关于Java开辟者来讲,今朝可用的完成是java.util.zip类,他经由过程JNI挪用zlib中crc32函数。这里有两本性能瓶颈。其一,JNI的挪用功能很低,假如每次盘算的数据量很小,好比1、2个byte,那末JNI的挪用开支远远高于盘算开支。其二,固然zlib的crc32完成是查表完成,可是自己功能另有很年夜的提拔空间。
对此,Hadoop社区今朝完成了Java版本的CRC32类来克制JNI的开支,它在JIT后速率会快于经由过程JNI挪用的Native完成。下图是经由过程运转PureJavaCRC32作者供应的benchmark程序得出的功能数据。
<br>
横坐标是每次盘算的字节巨细。可见,不管盘算字节巨细,PureJava完成分明快于ZlibCRC完成。
淘宝的优化办法:
关于瓶颈1,固然PureJava完成比本来快了很多,可是这远远没有到达极致。为了不JNI挪用开支,能够经由过程完成JVMIntrinsic来优化。Intrinsic能够在JIT过程当中将响应的完成inline到JIT后的天生的方针平台(如x86)指令中,比方Math.sin。
关于瓶颈2,SSE4.2指令集供应了CRC32指令减速校验盘算,这个指令的latency为3,thoughput是1,相称给力。固然多项式是crc32c和zlib的crc32分歧,可是假如没有汗青数据的累赘,仍是能够使用的。
优化了局:
使用了CRC32指令并完成为JVMIntrinsic后,我们看一下这个完成将有甚么样的体现?
<br>
是的,您没有看错,运转一样的benchmark程序,使用CRC32指令的JVMIntrinsic完成了可怕的完胜。在1个字节盘算下,zlibJNI完成速率是13M/s,PureJava完成是93M/s,CRC32Intrinsic是114M/s。在1K字节盘算下,CRC32Intrinsic完成是PureJava完成速率的10倍,是ZlibJNI完成的20倍,到达了6GB/s。再次夸大,这都是Java程序挪用的功能。
停止了?
木有,木有。这还不是极致,第一,今朝的Intrinsic完成为了便利,并未将CRC32指令间接inline到JIT后的指令中,必要经由过程call指令挪用。第二,注重到CRC32指令的latency是3,今朝完成没有益用ILP,实际上还能进步3倍功能。实践上我们已有了再进步2.6倍的完成。是的,再进步2.6倍。
预知后事怎样,敬请延续存眷中心体系研发部公用盘算组。
你精通任何一门语言就最强大。现在来看,java的市场比C#大,C#容易入手,比较简单,java比较难 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 是一种使网页(Web Page)产生生动活泼画面的语言 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
页:
[1]