首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原始数据类型与包装器类的性能

原始数据类型与包装器类的性能
EN

Stack Overflow用户
提问于 2016-11-01 19:35:02
回答 1查看 2.8K关注 0票数 3

我试图测量原始数据类型及其包装类的执行时间,以计数相同的数字。我知道包装类比原始数据类型花费更多的时间。

在下面的代码中,原始t1=5的执行时间和包装类t2= 31的执行时间。

代码语言:javascript
复制
import java.io.*;
import java.util.*;
public class Performance
{
  public static long primitive(int count)
     {
   long startTime = System.currentTimeMillis();
   for(int i=0;i<10000;i++)
     count++;
    System.out.println(count);
   long stopTime = System.currentTimeMillis();
   long elapsedTime = stopTime - startTime;
   return elapsedTime;
}
  public static long wrapper(Integer count)
{
    long startTime = System.currentTimeMillis();
    for(int i=0;i<10000;i++)
      count++;
      System.out.println(count);
    long stopTime = System.currentTimeMillis();
    long elapsedTime = stopTime - startTime;
    return elapsedTime;
 }

  public static void main(String args[])
  {

   Integer c = new Integer(0);
   long t2=Performance.wrapper(c);
    int count=0;
   long t1=Performance.primitive(count);
  System.out.println("t1="+t1+"t2="+t2);

  }
}

是否由于包装类(Integer)的对象创建或其他原因而导致性能差异?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-01 19:38:41

你在这里搞错了重要的事情。

首先,编写一个好的微基准测试远远超出了您在代码中所做的工作;有关一些指导原则,请参阅here

然后:你必须了解你想要测试的东西。抱歉,你显然不知道。就像这里:

代码语言:javascript
复制
public static long wrapper(Integer count)
{
  long startTime = System.currentTimeMillis();
  for(int i=0;i<10000;i++)
    count++

整数对象是不变的。此代码不仅“添加”整数对象,而且在每次迭代时创建一个新的整数对象。

当然,您的代码甚至不使用,而是使用计算结果。如果JVM/JIT注意到这一点,它可能会完全丢弃循环和添加构造。因此,您的方法至少应该返回count的最后值;调用方应该打印该结果。

为了回答您的具体问题:当然,使用引用类型包装器类需要付出一定的代价。当您的程序处理(实际上)大量要处理的元素时,使用Integer 列表比使用int数组的成本要高得多。当您不注意并且在代码中执行隐式自动装箱/取消装箱时,这实际上可以是hurt

但真正的答案是:你的注意力集中在错误的事情上。您知道,的第一个优先级应该是做一个伟大的设计,然后是一个经过良好测试的、健壮的、可读的、可维护的实现。当然,您不应该做完全愚蠢的事情和浪费性能,但是在您担心性能之前,最好是担心一般的Java技能。

长话短说:专注于理解java和“如何创建一个好的设计”;暂时忘掉“性能”。你只需要处理“性能”时,它是一个真正的问题,在你的应用程序。然后进行真正的分析,以确定根本原因并修复它。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40367376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档