来看Java实际和理论: 一个出缺陷的微基准的分析
java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大.即便功能不是以后项目标一个关头需求,乃至没有被标明为一个需求,一般也难于疏忽功能成绩,由于您大概会以为疏忽功能成绩将使本人成为“低劣的工程师”。开辟职员在以编写高功能代码为方针的时分,经常会编写小的基准程序来器度一种办法相对另外一种办法的功能。不幸的是,正如您在December撰写的"静态编译与功能丈量"这期文章中所看到的,与其他静态编译的言语比拟,批评用Java言语编写的给定习用法(idiom)或布局体的功能要坚苦很多。
一个出缺陷的微基准
在我宣布了十月份的文章"JDK5.0中更天真、更具可伸缩性的锁定机制"以后,一个同事给我发了SyncLockTest基准(如清单1所示),听说用它能够判别synchronized与新的ReentrantLock类哪个“更快”。他在本人的手提电脑上运转了该基准以后,作出了与那篇文章分歧的结论,说同步要更快些,而且给出了他的基准作为“证据”。全部历程——微基准的计划、完成、实行和对了局的注释——在良多方面都存在缺点。实在我这个同事是个很伶俐的家伙,而且对这个基准也花了很多工夫,可见这类事有多灾。
清单1.出缺陷的SyncLockTest微基准
interfaceIncrementer{
voidincrement();
}
classLockIncrementerimplementsIncrementer{
privatelongcounter=0;
privateLocklock=newReentrantLock();
publicvoidincrement(){
lock.lock();
try{
++counter;
}finally{
lock.unlock();
}
}
}
classSyncIncrementerimplementsIncrementer{
privatelongcounter=0;
publicsynchronizedvoidincrement(){
++counter;
}
}
classSyncLockTest{
staticlongtest(Incrementerincr){
longstart=System.nanoTime();
for(longi=0;i<10000000L;i++)
incr.increment();
returnSystem.nanoTime()-start;
}
publicstaticvoidmain(String[]args){
longsynchTime=test(newSyncIncrementer());
longlockTime=test(newLockIncrementer());
System.out.printf("synchronized:%1$10d
",synchTime);
System.out.printf("Lock: %1$10d
",lockTime);
System.out.printf("Lock/synchronized=%1$.3f",
(double)lockTime/(double)synchTime);
}
}
SyncLockTest界说了一个接口的两种完成,并利用System.nanoTime()来盘算每种完成运转10,000,000次的工夫。在包管线程平安的情形下,每种完成增添一个计数器;个中一种完成利用内建的同步,而另外一种完成则利用新的ReentrantLock类。此举的目标是回覆以下成绩:“哪个更快,同步仍是ReentrantLock?”让我们看看为何这个外表上没有成绩的基准终极没能乐成地器度出想要器度的工具,乃至没有器度出任何有效的工具。
<p>
微软什么都提供了。你可以试想一下,如果你是新手,你是希望你点一下按钮程序就能运行那,还是想自己一点一点的组织结构,然后打包发部,调错再打包...... 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 Java是一种计算机编程语言,拥有跨平台、面向对java 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 Java 编程语言的风格十分接近C、C++语言。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
页:
[1]