首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用junit3单元测试证明类A版本2的实例比版本1更高效?

如何使用junit3单元测试证明类A版本2的实例比版本1更高效?
EN

Stack Overflow用户
提问于 2012-02-10 03:26:14
回答 1查看 104关注 0票数 0

我有一大堆类需要调整,以提高内存使用率,以换取CPU时间,我用junit 3作为测试框架来证明这一点。

虽然我可以很容易地做到这一点(使用string.getBytes("UTF-8");在一个字节中填充多个布尔值,使用long而不是Date,实现我自己的收集,等等),但我真的没有可靠的方法来显示我提交代码时的改进,因为垃圾收集器的不可预测性质。

当我谈到垃圾收集时,我的意思是我已经做了这两件事:调用System.gc(),并尝试分配一个像long[] longs=new long[Integer.MAX_VALUE];这样的数组。这是我尝试实现的一些算法,但没有成功:

1:

A:垃圾回收;

B:获取当前使用的内存量;(long beforeold=Runtime.getRuntime().maxMemory - Runtime.getRuntime().freeMemory(); )

C:分配我的旧类的数万个实例的数组;

D:垃圾收集;

f:long afterold=Runtime.getRuntime().maxMemory - Runtime.getRuntime().freeMemory();

G:重复实例化新类的过程

H:比较内存中的差异。

我得到的结果非常奇怪:我的"afterold“小于我的"beforeold”,这表明在为新类分配内存时发生了某种奇怪的垃圾收集事件。

新类实例使用的内存结果从负到正,在实例化过程中再次发出一些奇怪的垃圾回收信号。

现在,有没有其他人试图证明某些类比其他类更有效?这是一个非常酷的问题,但它仍然是一个问题。

Thx,你们说了算!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-10 03:36:27

Heinz Kabutz在Java newsletter时事通讯中有一些技巧:http://www.javaspecialists.eu/archive/Issue193.html

代码语言:javascript
复制
public long calculateMemoryUsage(ObjectFactory factory) {
  Object handle = factory.makeObject();
  long memory = usedMemory();
  handle = null;
  lotsOfGC();
  memory = usedMemory();
  handle = factory.makeObject();
  lotsOfGC();
  return usedMemory() - memory;
}

private long usedMemory() {
  return Runtime.getRuntime().totalMemory() -
      Runtime.getRuntime().freeMemory();
}

private void lotsOfGC() {
  for (int i = 0; i < 20; i++) {
    System.gc();
    try {
      Thread.sleep(100);
    } catch (InterruptedException e) {
      Thread.currentThread().interrupt();
    }
  }
}

public void showMemoryUsage(ObjectFactory factory) {
  long mem = calculateMemoryUsage(factory);
  System.out.println(
      factory.getClass().getSimpleName() + " produced " +
          factory.makeObject().getClass().getSimpleName() +
          " which took " + mem + " bytes");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9217380

复制
相关文章

相似问题

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