- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java理论和实践:一个有缺陷的微基准的剖析.doc
Java 理论和实践: 一个有缺陷的微基准的剖析
还有其他类型吗?
众所周知,软件工程师常常受到性能问题的困扰,有时候甚至很过分。虽然有时候性能在一个软件项目中是最重要的需求,例如在为高速交换机开发协议路由软件时便是如此,但在大多数情况下,需要在性能需求与其他需求之间进行平衡,例如功能性、可靠性、可维护性、可扩展性、投入市场的时间以及其他业务和工程上的考虑。在本月的 Java 理论和实践 中,专栏作家 Brian Goetz 将探讨为什么度量 Java 语言结构体的性能比看上去要难得多。请在本文附带的 讨论论坛 中与作者和其他读者交流您对本文的看法。(也可以通过单击文章顶部或底部的 讨论 来访问该论坛。)
即使性能不是当前项目的一个关键需求,甚至没有被标明为一个需求,通常也难于忽略性能问题,因为您可能会认为忽略性能问题将使自己成为“差劲的工程师”。开发人员在以编写高性能代码为目标的时候,常常会编写小的基准程序来度量一种方法相对于另一种方法的性能。不幸的是,正如您在 December 撰写的 动态编译与性能测量 这期文章中所看到的,与其他静态编译的语言相比,评论用 Java 语言编写的给定惯用法(idiom)或结构体的性能要困难得多。
一个有缺陷的微基准
在我发表了十月份的文章 JDK 5.0 中更灵活、更具可伸缩性的锁定机制 之后,一个同事给我发了 SyncLockTest 基准(如清单 1 所示),据说用它可以判断 synchronized 与新的 ReentrantLock 类哪一个“更快”。他在自己的手提电脑上运行了该基准之后,作出了与那篇文章不同的结论,说同步要更快些,并且给出了他的基准作为“证据”。整个过程 —— 微基准的设计、实现、执行和对结果的解释 —— 在很多方面都存在缺陷。其实我这个同事是个很聪明的家伙,并且对这个基准也花了不少功夫,可见这种事有多难。
清单 1. 有缺陷的 SyncLockTest 微基准
interface Incrementer {
void increment();
}
class LockIncrementer implements Incrementer {
private long counter = 0;
private Lock lock = new ReentrantLock();
public void increment() {
lock.lock();
try {
++counter;
} finally {
lock.unlock();
}
}
}
class SyncIncrementer implements Incrementer {
private long counter = 0;
public synchronized void increment() {
++counter;
}
}
class SyncLockTest {
static long test(Incrementer incr) {
long start = System.nanoTime();
for(long i = 0; i ; i++)
incr.increment();
return System.nanoTime() - start;
}
public static void main(String[] args) {
long synchTime = test(new SyncIncrementer());
long lockTime = test(new LockIncrementer());
System.out.printf(synchronized: %1$10d\n, synchTime);
System.out.printf(Lock: %1$10d\n, lockTime);
System.out.printf(Lock/synchronized = %1$.3f,
(double)lockTime/(double)synchTime);
}
}
SyncLockTest 定义了一个接口的两种实现,并使用 System.nanoTime() 来计算每种实现运行 10,000,000 次的时间。在保证线程安全的情况下,每种实现增加一个计数器;其中一种实现使用内建的同步,而另一种实现则使用新的 ReentrantLock 类。此举的目的是回答以下问题:“哪一个更快,同步还是 ReentrantLock?”让我们看看为什么这个
您可能关注的文档
- (周毓清巴陵)现阶段开展风险导向审计的难点.doc
- (存档不建档)动物航天的意义.doc
- (打印)化学反应进行的方向.doc
- (春剑军)浅谈实验教学如何实现“有效”过度.doc
- (第一轮B卷)抗菌药物临床应用知识和.doc
- (简体)基于股权结构分析的融资结构研究.doc
- (简体)民间投资的制度经济学分析.doc
- (简体)股指期货交易实例分析.doc
- ,心脏术后ICU综合征的相关危险因素及护理对策.doc
- -课程与教学_一种重要的学校文化软实力.doc
- DB44_T 2611-2025 城市排水管网有毒有害气体监测与风险分级管理技术标准.pdf
- DB44_T 2612-2025 竞赛类科普活动策划与实施服务规范.pdf
- DB43_T 2947-2024 烟草种子质量控制规程.pdf
- DB37_T 4836-2025 煤矿风量实时监测技术要求.pdf
- 叉车防撞系统,全球前22强生产商排名及市场份额(by QYResearch).docx
- 超滤膜,全球前18强生产商排名及市场份额(by QYResearch).docx
- DB62T 4172-2020 玉米品种 酒623规范.pdf
- DB62T 4160-2020 在用真空绝热深冷压力容器综合性能在线检测方法.pdf
- DB62T 4164-2020 辣椒品种 酒椒1号.pdf
- DB62T 4133-2020 公路隧道地质超前预报机械能无损探测技术规程.pdf
最近下载
- 2024年上半年教师资格证考试《初中语文》真题.docx
- 耳鼻喉科考试题及答案.docx VIP
- 超星尔雅学习通《组织行为学》章节测试答案满分版.doc
- 高中数学椭圆、双曲线抛物线综合练习题及答案-.pdf VIP
- 2024 巡察整改专题民主生活会个人对照检查材料.docx VIP
- 2024年上半年教师资格证考试《初中语文》真题.pdf
- 基于Modbus总线的马铃薯贮藏库温湿度采集.doc VIP
- 2025年全国保密教育线上培训考试试题库及完整答案【全优】.docx VIP
- 2024年上半年教师资格证考试《教育知识与能力》(中学)真题.pdf
- 晓磊(CHXL)Lei3000变频器说明书用户手册.pdf
文档评论(0)