`
songhongchen
  • 浏览: 122745 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

如何测试才能看出效果?迷惑,为什么先执行的方法用的时间要长很多?

阅读更多
以下的代码:
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.RandomAccess;

public class ArrayListTest implements Runnable
{
	private final static int SIZE = 50000;
	RandAccessClass rac = new RandAccessClass();
	NotRandAccessClass nrac = new NotRandAccessClass();

	public void run()
	{
		testTest(rac, true);
		testTest(nrac, false);
	}
	public ArrayListTest()
	{
		for (int i = 0; i < SIZE; i++)
		{
			rac.add(new Date());
		}
		for (int i = 0; i < SIZE; i++)
		{
			nrac.add(new Date());
		}
	}
	public static void main(String... a)
	{
		ArrayListTest alt = new ArrayListTest();
		Thread t = new Thread(alt);
		t.run();
		ArrayListTest alt1 = new ArrayListTest();
		Thread t1 = new Thread(alt1);
		t1.run();
	}
	public static void testTest(List<Date> list, boolean isRandAccessClass)
	{
		long start = System.currentTimeMillis();
		int count = list.size();
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < count; i++)
		{
			sb.append(list.get(i).toString());
		}
		if (isRandAccessClass)
		{
			System.out.println("实现了RandomAccess接口使用了" + (System.currentTimeMillis() - start) + "毫秒");
		}
		else
		{
			System.out.println("没有实现RandomAccess接口使用了" + (System.currentTimeMillis() - start) + "毫秒");
		}
	}
}

class RandAccessClass extends ArrayList<Date> implements List<Date>, RandomAccess
{
	private static final long serialVersionUID = 6194516078884111626L;
}

class NotRandAccessClass extends ArrayList<Date> implements List<Date>
{
	private static final long serialVersionUID = 2804918599235402533L;
}


当RUN方法中的执行顺序是:
testTest(rac, true);
testTest(nrac, false);
这样时,不实现RandomAccess接口的执行速度要快,结果
实现了RandomAccess接口使用了218毫秒
没有实现RandomAccess接口使用了172毫秒
实现了RandomAccess接口使用了187毫秒
没有实现RandomAccess接口使用了172毫秒

而当RUN方法中的执行顺序是:
testTest(nrac, false);
testTest(rac, true);
时,实现RandomAccess接口的执行速度要快,结果
没有实现RandomAccess接口使用了219毫秒
实现了RandomAccess接口使用了156毫秒
没有实现RandomAccess接口使用了203毫秒
实现了RandomAccess接口使用了156毫秒

而在API中写道,实现RandomAccess接口类的速度要快一些的。比较迷惑,为什么先执行的方法用的时间要长很多?
0
0
分享到:
评论
2 楼 songhongchen 2009-04-14  
crazycode 写道

我也遇到过这个问题,我的理解是先执行的方法,jvm需要初始化,因此会使用更多的时间。

你说的有道理,我想也差不多,jvm初始化需要时间,但我感觉我的System.currentTimeMillis();执行的时候,jvm应该初始化完成了.

还有就是怎么样才能真正的测试出想要的结果呢
1 楼 crazycode 2009-04-14  
我也遇到过这个问题,我的理解是先执行的方法,jvm需要初始化,因此会使用更多的时间。

相关推荐

    电脑快速测试工具

    测试时间还太长?测试数据不客观?测试数据看不懂? 快来使用电脑快速测评工具 单文件版本,无需安装,点开立即测试! 测试全面,包括CPU,内存,硬盘,闪存,固态硬盘(SDD),独立显卡,集成显卡等等...... 跨...

    java-意想不到的迷惑

    Java编程语言中存在一些容易让人迷惑的特性,这些特性可能会导致程序出现意想不到的错误。本文将探讨两个具体的Java谜题,一个是关于整数取余操作的奇数性判断,另一个涉及浮点数精度问题。 首先,让我们来看第一个...

    基于Qt的Python代码迷惑器的设计与实现.pdf

    4. 执行时间和迷惑不可逆性:文档中提到的代码迷惑器在执行时间上开销较小,这意味着经过迷惑处理的代码对程序运行性能的影响微乎其微。此外,所实现的代码迷惑不可逆,也就是说,一旦源代码经过迷惑处理,就很难...

    android个性十足的loading加载效果.zip

    4. **线程管理**:加载动画通常在主线程执行,但如果是长时间的网络请求,应该将实际的数据加载放到子线程,避免阻塞UI。使用`AsyncTask`、`Handler`、`Retrofit`+`RxJava`等方式可以很好地处理这种异步任务。 5. *...

    基于Java多线程隐藏数组下标变换表达式的代码迷惑算法.pdf

    "基于Java多线程隐藏数组下标变换表达式的代码迷惑算法" 本文介绍了一种基于Java多线程的代码迷惑算法,该算法可以隐藏数组下标变换表达式,以防止源代码静态分析和基于源代码植入反迷惑攻击。该算法的核心思想是...

    迷惑批处理脚本破除(原创)

    批处理脚本是一种在Windows操作系统环境下执行的一系列命令集合,通常以.bat或.cmd为扩展名。这些脚本文件用于自动化日常任务,节省用户手动操作的时间。"迷惑批处理脚本破除"的主题意味着我们将探讨一些可能包含...

    轻的准标量子介子和双迷惑的重子散​​射长度,重夸克-反夸克对称

    包括反冲效果以及自旋12和自旋32双倍增距重子之间的质量分裂。 为了给出数值结果,我们以形式协变方法构造了具有重双夸克-反夸克对称性的手性拉格朗日算子。 然后,我们将双重迷惑的重子的低能常数与D(*)介子的...

    高效管理考研时间的黄金法则.doc

    首先,迷惑在于缺乏明确的目标,很多考生在选择专业和学校上花费过多时间,影响了复习进度。其次,犹豫不决导致决策延迟,使学习效率降低。例如,一些在职人员在是否辞职备考之间摇摆不定,导致时间白白流逝。第三,...

    向前跳转迷惑FLASH反编译

    在IT行业中,尤其是在游戏开发和数字内容创作领域,Flash是一种广泛使用的工具,用于创建交互式动画和应用程序。本文将深入探讨“向前跳转迷惑FLASH反编译”这一主题,这通常与保护Flash源文件(FLA)的安全性相关,...

    人工智能迷惑行为大赏.docx

    ### 人工智能迷惑行为大赏 #### 一、人工智能的“幽默”瞬间 ##### 1.1 语音识别 - **情景描述**:用户对语音助手说:“请帮我预订一张明天上午10点去北京的火车票。”人工智能系统回答:“好的。”随后自动打开...

    追求代码质量:不要被覆盖报告所迷惑

    总的来说,追求代码质量不仅仅是满足测试覆盖率的指标,而是要理解代码的实际执行情况,以及它如何满足业务需求和设计原则。开发者应当谨慎对待测试覆盖报告,同时运用多种方法和工具,确保代码的健壮性和可维护性。...

    数学哲学一个充满迷惑的领域

    ### 数学哲学:一个充满迷惑的领域 #### 维特根斯坦与数学哲学 维特根斯坦被公认为是当代最具原创性和影响力的哲学家之一。本文聚焦于他对数学哲学问题的独特见解及其对这一领域的贡献。这种关注不仅仅源于作者对...

    颜色迷惑人HTML5游戏源码

    《颜色迷惑人HTML5游戏源码》是一款基于HTML5技术开发的在线小游戏,它通过色彩的变换和逻辑挑战,为玩家提供了一种独特的娱乐体验。HTML5是现代网页开发的标准,具有良好的跨平台兼容性和丰富的功能特性,使得游戏...

    硬盘测试工具 Parkdale 3.03.zip

    Parkdale 中文版为您提供了一个坚固而整洁的工具,主要用于测试硬盘驱动器的性能,同时还可以帮助您对光驱和网络连接进行基准测试。此外,它可与USB闪存驱动器一起使用,并通知您捕获的速度是低速还是最佳速度。 ...

    Qt布局管理器一些会迷惑的点(1)

    2. **为什么需要布局管理器?** 布局管理器使得UI设计更具灵活性和响应性,无需手动调整每个控件的位置和大小,尤其在不同屏幕分辨率和设备上,可以保证UI的美观和可用性。 3. **如何添加布局?** 通常,我们可以...

    Java91个迷惑的问题

    在Java编程语言中,"Java91个迷惑的问题"涵盖了各种各样的技术难点和常见陷阱,这些谜题和表达式谜题旨在帮助开发者深化对Java的理解。以下是一些可能涉及的知识点,它们可能会出现在"java解惑.pdf"文档中: 1. **...

    如何形成企业健康的执行力心态.pptx

    企业执行力是组织成功的关键因素,它涉及到如何将战略目标转化为实际行动并取得预期成果。这篇文档主要探讨了五种帮助企业建立健康执行力心态的方法。 首先,"现实心态"强调将目标与现实相结合。这意味着企业需要...

    营销队伍执行力的培养与管理.ppt

    综上所述,营销队伍执行力的培养与管理涉及组织文化、个人角色定位、时间管理、团队协作和决策制定等多个层面。通过不断学习和改进,企业可以构建一支高效、适应性强的营销团队,以应对市场竞争并实现持续发展。

    买笔记本电脑要注意什么?.docx

    购买笔记本电脑时,需要注意多个方面以确保选购到适合自己需求的产品。以下是对这些注意事项的详细解释: 1. **不懂装懂**:在购买笔记本电脑时,如果你对产品不熟悉,尽量不要假装内行。否则,销售人员可能会利用...

Global site tag (gtag.js) - Google Analytics