|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
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>
微软什么都提供了。你可以试想一下,如果你是新手,你是希望你点一下按钮程序就能运行那,还是想自己一点一点的组织结构,然后打包发部,调错再打包...... |
|