如何分析代码中的性能和内存泄漏

时间:2013-09-04 22:53:06

标签: java

如何提高下面代码的性能,请提供任何提示以提高代码性能是否正确使用CopyOnWriteList。是否有任何机会下面的代码可能导致内存泄漏。

代码:

public static List<TestVO> description(final TestVO desc) {

    List<TestVO> descList = new CopyOnWriteArrayList<TestVO>();

    final StringBuilder builder = new StringBuilder();
    String add = "";
    TestVO desc =null;
    for (int i = 0; i < 2; i++) {
        desc = new TestVO();
        for (String key : audit.getLog().keySet()) {
            if (!key.equals("hello")) {
                builder.append(key + "=" + audit.getLog().get(key)
                        + add);
                add = ", ";
                audit.getLog().remove(key);
            } else {
                desc.setDesc(key + " = "
                        + audit.getLog().get(key));
                descList.add(desc);
                audit.getLog().remove(key);
                break;
            }

        }

    }
    desc.setDesc("Checks : " + builder.toString());
    descList.add(desc);
    return descList;

}

从主要方法调用:

              TestVO a1=new TestVO();
    a1.getLog().put("1", new BigDecimal(12));
    a1.getLog().put("2", new BigDecimal(22));
    a1.getLog().put("3", new BigDecimal(32));
    a1.getLog().put("4", new BigDecimal(42));
    a1.getLog().put("Hello", new BigDecimal(90));

    description(a1);

TestVO有2个方法,一个是log,它的类型是HashMap,另一个是desc,它的类型是字符串。

1 个答案:

答案 0 :(得分:1)

该特定代码的性能提示

  • 失去看似毫无用处的第一个循环。

  • 按照惯例使用StringBuilder

    builder.append(key + "=" + audit.getLog().get(key) + add);
    

    应该是:

    builder.append(key).append("=").append(audit.getLog().get(key)).append(add);
    
  • 您真的需要一个descList作为List而不是Set吗?

  • 无论如何你不需要CopyOnWriteArrayList。或者至少我们不知道你是否需要这个代码。

该特定代码的一般提示

  • 目前还不清楚它是做什么的,它看起来像一个制作和设计的例子。是一个吗?

  • 您的代码似乎可以同时制作多个内容。也许它对性能有好处,但也许这也给它一个非常奇怪的设计。

  • 您更改add变量的方式看起来很奇怪,看起来您最好建立一个集合,然后生成所需的字符串。

  • auditDesc未声明,因此您可能没有向我们提供正确的代码。

  • 你说calling from main method,但是我们看不到对description() 的任何调用(发现它,因为它在外面是不可见的代码块。)

  • 我们不知道它应该做什么,所以在你提供更完整的代码示例之前我无法提供更多帮助。