快速业务通道

Java 6中的线程优化真的有效么? - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
量锁的开销了么? 我们的结论成熟么?或者还有没有其他的情况?在本文的第二部分里,我们将会 深入研究这个基准测试,力争回答这些问题。在这个过程中,我们会发现获取结 果并不困难,困难的是判断出这些结果是否可以回答前面提出的问题。

public class LockTest { private static final int MAX = 20000000; // 20 million public static void main(String[] args) throws InterruptedException { // warm up the method cache for (int i = 0; i < MAX; i++) {    concatBuffer("Josh", "James", "Duke");    concatBuilder("Josh", "James", "Duke"); } System.gc(); Thread.sleep(1000); System.out.println("Starting test"); long start = System.currentTimeMillis(); for (int i = 0; i < MAX; i++) {    concatBuffer("Josh", "James", "Duke"); } long bufferCost = System.currentTimeMillis() - start; System.out.println("StringBuffer: " + bufferCost + " ms."); System.gc(); Thread.sleep(1000); start = System.currentTimeMillis(); for (int i = 0; i < MAX; i++) {    concatBuilder("Josh", "James", "Duke"); } long builderCost = System.currentTimeMillis() - start; System.out.println("StringBuilder: " + builderCost + " ms."); System.out.println("Thread safety overhead of StringBuffer: " + ((bufferCost * 10000 / (builderCost * 100)) - 100) + "%\n"); } public static String concatBuffer(String s1, String s2, String s3) {    StringBuffer sb = new StringBuffer();    sb.append(s1);    sb.append(s2);    sb.append(s3);    return sb.toString(); } public static String concatBuilder(String s1, String s2, String s3) {    StringBuilder sb = new StringBuilder();    sb.append(s1);    sb.append(s2);    sb.append(s3);    return sb.toString(); } }

Java 6中的线程优化真的有效么?(4)

时间:2011-05-20 infoq.com Jeroen Borgers 译:韩锴

运行基准测试

我运行这个测试的环境是:32位的Windows Vista笔记本电脑,配有Intel Core 2 Duo,使用Java 1.6.0_04。请注意,所有的优化都是在Server VM上实现 的。但这在我的平台上不是默认的VM,它甚至不能在JRE中使用,只能在JDK中使 用。为了确保我使用的是Server VM,我需要在命令行上打开-server选项。其他 的选项包括:

-XX:+DoEscapeAnalysis, off by default

-XX:+UseBiasedLocking, on by default

-XX:+EliminateLocks, on by default

编译源代码,运行下面的命令,可以启动测试:

java-server -XX:+DoEscapeAnalysis LockTest关于Jeroen Borgers

Jeroen Borger是Xebia的资深咨询师。Xebia是一家国际IT咨询与项目组织公 司,专注于企业级Java和敏捷开发。Jeroen帮助他的客户攻克企业级Java系统的 性能问题,他同时还是Java性能调试课程的讲师。他在从1996年开始就可以在不 同的Java项目中工作,担任过开发者、架构师、团队lead、质量负责人、顾问、 审核员、性能测试和调试员。他从2005年开始专注于性能问题。

鸣谢

没有其他人的鼎力相助,是不会有这篇文章的。特别感谢下面的朋友:

Dr. Cliff Click,原Sun公司的Server VM主要架构师,现工作在Azul System ;他帮我分析,并提供了很多宝贵的资源。

Kirk Pepperdine,性能问题的权威,帮助我编辑文章。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号